Don't use RENDER_NOW. It's the complete opposite of what he's asking for. In fact NEVER use RENDER_NOW unless you are absolutely sure that you absolutely need it. The only valid use case for RENDER_NOW I can think of is if you intend to open the file yourself and do extra image processing on it. If you want to give a user a URL then you NEVER need it.
My input on this subject: - If your thumbnail size is larger than the image's size then the original image's url will be returned because it's already big enough (this IS what you want) - If you have setup a 404 handler files will only be generated when they are requested by the user. This IS what you want.
We support generating thumbnails when a file is not found. If a path looks like a thumbnail it gets sent to thumb.php where it's then rendered, sent to the user, and saved to the filesystem for future requests. This has a number of advantages: - You can delete all your thumbnails if you think you have piles ones not being used anymore. Since they will all safely be regenerated when used. - You can use thumbnails inside of css since you know the thumb will always be usable. - It speeds up your wiki. Rendering thumbnails takes time. And during the time that thumbnails are being generated php is frozen. That means that thumbnail render time adds to your wiki's page load time on upload, save, previews, view, etc... By using a 404 handler the wiki is capable of skipping the rendering serving a url and deferring that load time to a process dedicated to rendering the thumbnail. - It also lets you dedicate machines to image thumbnailing and allow your webservers to focus on serving webpages instead of spending cpu time on image processing.
One of these days I'd like to see if I could write a fuse filesystem that exposes a cache as a filesystem. ;) then you can mount that as your filesystem for thumbs/ and have all old thumbnails purged automatically. (We don't have the capability to delete thumbnails that are no longer used)
On Tue, 27 Mar 2012 22:13:23 -0700, Hunter Fernandes h.g.fern@gmail.com wrote:
Since no one has replied at this time, I thought I'd give a crack at an answer (I really don't know if this will work).
Some goodies from a quick scan of thumb.php:
$img = wfLocalFile( $fileName ); $params = array( 'width' => 100, 'height' => 100, ); $img->transform( $params, File::RENDER_NOW ); $localpath = $thumb->getPath(); $thumbPath = $img->getThumbPath( $thumbName );
That's my guess. I havn't tested it or anything.
- Hunter F.
On Tue, Mar 27, 2012 at 7:03 PM, Daniel Renfro drenfro@vistaprint.comwrote:
MW gurus,
I am working on an API module to an extension and would like to create thumbnails programmatically for some images (if they don't already have them.)
The includes/filerepo/File.php file contains a createThumb() method, which looks like it's what I want. From the comment block directly above the aforementioned method: /** * Create a thumbnail of the image having the specified width/height. * The thumbnail will not be created if the width is larger than the * image's width. Let the browser do the scaling in this case. * The thumbnail is stored on disk and is only computed if the thumbnail * file does not exist OR if it is older than the image. * Returns the URL. * * .... */
However, this method always returns the url of the file itself and not the thumb. From what I can tell it never generates the thumbnail (it's not in the filesystem repo in any directory.) My code is:
<?php # ...query to get a list of recently uploaded images (quite simple) .... $result = $dbr->select(); # loop through them and get a thumbnail & url foreach ( $result as $row ) { $title = Title::newFromText( $row->page_title, NS_FILE ); $file = wfFindFile( $title ); if ( !$file ) { continue; } $thumbnail_url = $file->createThumb( 80 ); # width in pixels ...add to the API result... } ...return... ?>
I'm sure that my query return valid page titles/namespaces, and that the files exist (both in the wiki and in the filesystem.) They are all local, and some are quite large. I'd hate to have to send the entire image and make the browser do the scaling, as the thumbnail will get reused and the resizing is only done once.
Any ideas fellow MW gurus? What am I missing?
-Daniel Renfro