Note: In order to use the Images API in your local environment you must first download and install PIL, the Python Imaging Library. PIL is not available on App Engine; it is only used as a stub for the Images API in your local environment. Only the transforms provided in the images API are available on App Engine.
On Mon, Jun 29, 2009 at 9:02 PM, Hans Donner<hans.don...@pobox.com> wrote: > http://code.google.com/intl/nl-NL/appengine/docs/python/images/installingPIL.html > > On Mon, Jun 29, 2009 at 8:31 PM, mdipierro<mdipie...@cs.depaul.edu> wrote: >> >> It is not pure python it is a binary library. As far as I know none of >> them runs on GAE. >> >> On Jun 29, 1:23 pm, Joe Barnhart <joe.barnh...@gmail.com> wrote: >>> Since PIL is all Python, do you suppose it's compatible with GAE? >>> That could give it a nod over ImageMagick in my mind. >>> >>> On Jun 29, 9:12 am, mdipierro <mdipie...@cs.depaul.edu> wrote: >>> >>> > Something like this could go in gluon.conrtib send me a patch when you >>> > have time. >>> >>> > On Jun 29, 10:39 am, cjparsons <cjparso...@yahoo.co.uk> wrote: >>> >>> > > I've had success with PIL to thumbnail uploaded images. >>> >>> > > In upload form handling: >>> >>> > > if form.accepts(request.vars,session): >>> > > if not form.vars.get("delete_this_record",False): >>> > > response.flash = "image accepted" >>> > > makeThumbnail(form.vars.id) >>> > > else: >>> > > response.flash = "image deleted" >>> >>> > > then the function to make the thumbnail. This might have less error >>> > > handling than you'd like. My images are in the db, the main image is >>> > > field 'image_blob' and the thumbnail, also a blob, 'thumbnail_data'. >>> > > If yours are in a file then the changes you'd need would actually make >>> > > the code simpler. >>> >>> > > THUMBNAILSIZE = 120 >>> >>> > > def makeThumbnail(id): >>> > > import Image >>> > > import StringIO >>> >>> > > imgRecord = db.images[id] >>> > > if not imgRecord: >>> > > return None >>> > > imgData = Image.open(StringIO.StringIO >>> > > (imgRecord.image_blob)).convert("RGB") >>> > > imgData.thumbnail((THUMBNAILSIZE,THUMBNAILSIZE),Image.ANTIALIAS) >>> > > thumbFile = StringIO.StringIO() >>> > > imgData.save(thumbFile,"JPEG") >>> > > thumbFile.seek(0) >>> > > imgRecord.update_record(thumbnail_data=thumbFile.read()) >>> > > db.commit() >>> > > return True >>> >>> > > From memory, the above will shrink the picture so the largest >>> > > dimension is THUMBNAILSIZE, and the aspect ratio is maintained - the >>> > > shorter dimension may be less than THUMBNAILSIZE if the image wasn't >>> > > square. >>> >>> > > From a different iteration of my code, the following will always give >>> > > you a square of dimensions xy by xy, without distorting the image, but >>> > > will crop the image if it wasn't already square. >>> >>> > > def makeThumbnail(blob, xy): >>> > > imgData = Image.open(StringIO.StringIO(blob)).convert("RGB") >>> > > # make sure thumbnails are square by cropping original to a >>> > > # square. >>> > > # Find the longest side >>> > > w,h = imgData.size >>> > > if w >= h: >>> > > voffset=0 >>> > > hoffset=(w-h)/2 >>> > > ex = h >>> > > else: >>> > > hoffset=0 >>> > > voffset=(h-w)/2 >>> > > ex = w >>> > > imgData = imgData.transform((xy,xy),Image.EXTENT, >>> > > (hoffset,voffset,hoffset+ex,voffset+ex),Image.BICUBIC) >>> > > thumbFile = StringIO.StringIO() >>> > > imgData.save(thumbFile,"JPEG") >>> > > thumbFile.seek(0) >>> > > return thumbFile >>> >>> > > Sorry if the speed I'm writing my reply, or the inelegance of my >>> > > implementation makes this post less than helpful. >>> >>> > > Chris >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---