Thanks for everyone's help. I got it to work, here's the script. It
creates 4 images, enhances them and adds some properties to the
largest one.
----------
def makeImages(self, imagefile, newkeywords, newcaption):
import PIL.Image, ImageEnhance, ImageFilter
import PIL
from StringIO import StringIO
import os.path
import datetime
import time
# create the data in a new PIL Image.
image=PIL.Image.open(imagefile)
image=image.convert('RGB')
image=image.filter(ImageFilter.SHARPEN)
image=image.resize((640, 480), PIL.Image.ANTIALIAS)
image2=image.resize((320, 240), PIL.Image.ANTIALIAS)
image3=image.resize((160, 120), PIL.Image.ANTIALIAS)
image4=image.resize((80, 60), PIL.Image.ANTIALIAS)
# get the data in memory.
newimage_file=StringIO()
image.save(newimage_file, "JPEG")
newimage_file.seek(0)
newimage_file2=StringIO()
image2.save(newimage_file2, "JPEG")
newimage_file2.seek(0)
newimage_file3=StringIO()
image3.save(newimage_file3, "JPEG")
newimage_file3.seek(0)
newimage_file4=StringIO()
image4.save(newimage_file4, "JPEG")
newimage_file4.seek(0)
# create an id for the image
now = datetime.datetime.now()
newimageid=now.strftime('%Y%m%d%H%M%S')
newimage_id=newimageid + '-640.jpg'
newimage_id2=newimageid + '-320.jpg'
newimage_id3=newimageid + '-160.jpg'
newimage_id4=newimageid + '-80.jpg'
# if there's an old image, delete it
if newimage_id in self.objectIds():
self.manage_delObjects([newimage_id])
if newimage_id2 in self.objectIds():
self.manage_delObjects([newimage_id2])
if newimage_id3 in self.objectIds():
self.manage_delObjects([newimage_id3])
if newimage_id4 in self.objectIds():
self.manage_delObjects([newimage_id4])
# create the Zope image object for the new image
self.manage_addProduct['OFSP'].manage_addImage(newimage_id,
newimage_file, '')
self.manage_addProduct['OFSP'].manage_addImage(newimage_id2,
newimage_file2, '')
self.manage_addProduct['OFSP'].manage_addImage(newimage_id3,
newimage_file3, '')
self.manage_addProduct['OFSP'].manage_addImage(newimage_id4,
newimage_file4, '')
# now find the new zope object so we can modify
# its properties.
newimage_image=getattr(self, newimage_id)
newimage_image.manage_addProperty('keywords', '', 'string')
newimage_image.manage_addProperty('caption', '', 'string')
newimage_image.manage_addProperty('imageid', '', 'string')
newimage_image.manage_changeProperties(keywords=newkeywords,
caption=newcaption, imageid=newimageid)
newimage_image2=getattr(self, newimage_id2)
newimage_image2.manage_addProperty('imagefile2', '', 'string')
newimage_image3=getattr(self, newimage_id3)
newimage_image3.manage_addProperty('imagefile3', '', 'string')
newimage_image4=getattr(self, newimage_id4)
newimage_image4.manage_addProperty('imagefile4', '', 'string')
----------
On Feb 22, 2007, at 4:11 PM, Andrew Langmead wrote:
On Feb 22, 2007, at 1:29 PM, Tom Von Lahndorff wrote:
8 original_image=getattr(self, original_id)
9 original_file=StringIO(str(original_image.data))
[and later]
AttributeError: DSCF0004.jpg
I think your line numbers are off by one, because I'd think it is
the getattr that would be causing the Attribute Error (at most,
line "9" could give an attribute error for something called "data".
Zope turns file upload objects into
ZPublisher.HTTPRequest.FileUpload instances. and pass them to your
method. FileUpload instances have an interface similar to python
file objects, you can .read(), .seek(), .close() or do whatever you
want to them and might not need to wrap the contents into a
StringIO object first. (your trying to fetch the file as an
attribute of "self" seems to imply that you think the form data is
already uploaded into zope and is an Image object in a folder. It
isn't there yet, and won't be unless you store it there.)
I think if you removed lines 8 and 9 (by your numbering) and
renamed the second argument to the method to "original_file",
things would work as you need:
1 def makeImages(self, original_file):
2
3 import PIL.Image
4 import PIL
5 import os.path
6
...
_______________________________________________
Zope maillist - Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )