[Zope] PIL Question

Ross Lazarus rerla@channing.harvard.edu
Sat, 11 May 2002 11:59:48 -0400


the img tag expects the server to deliver an existing image file from 
somewhere. What you need to do is a little more complex (!). You COULD 
write the image into a zope object (bad idea for lots of reasons - eg 
zodb bloat) or to a localFS (better but still sucky) and deliver it from 
there using an img tag. AFAIK, this is the ONLY way to embed your image 
into a page with text and stuff.

I use PIL to make images and either email them or return them for the 
browser to display or to save. Email is good if the generation takes a 
long time obviously. To get the browser to display a returned image 
binary, you must set the mime type in the http headers to image/jpeg 
using or whatever and returning the binary image - the browser will 
display it correctly.

If you want the image to be saveable, it gets worse. IE and netscape are 
both broken if you try the file-disposition header, it doesn't work as 
advertised. There's a work around which I use  - namely setting the mime 
type to application/octet-stream

> 
> I'm trying to create an external method that will take variables that exist in a ZSQL call and will output an image
> 
> based on that: 
> 
> import Image, ImageDraw, StringIO, os.path
> 
> def PILtest():
>         image = Image.new('RGB',[25,25])
>         ## IMage Stuff Happens here!
>         return image
> 
> Where this would occur in a DTML-Method of:
> 
> <dtml-in SQL_COMMAND>
>   <img src="PILtest"> <!--vars to be passed in with this-->
> </dtml-in>
> 
> But I can't get PILtest to output the image itself.  Save() doesn't seem to be of help directly.  Anyone have any suggestions?
> 
> Jason


-- 
Ross Lazarus
Visiting Associate Professor in Medicine,
Channing Labs, 181 Longwood Ave., Boston MA 02115, USA.
Fax:+617 525 0958, Office: +617 525 2730