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=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(), "JPEG")
    newimage_file2=StringIO(), "JPEG")
    newimage_file3=StringIO(), "JPEG")
    newimage_file4=StringIO(), "JPEG")

    # create an id for the image
    now =
    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():
    if newimage_id2 in self.objectIds():
    if newimage_id3 in self.objectIds():
    if newimage_id4 in self.objectIds():

    # 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(
[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):
3    import PIL.Image
4    import PIL
5    import os.path

Zope maillist  -
**   No cross posts or HTML encoding!  **
(Related lists - )

Reply via email to