I am attempting to create and store a thumbnail image in a MySQL database. 
The source image comes from the same record and has already been stored in 
the database. When my code executes, the thumbnail name gets written to the 
"thumb" field, but the "thumb_data" field is null. 

My table is defined like this:

db.define_table ("images",
Field ("image", "upload", uploadfield = "image_data",
  requires = IS_IMAGE (extensions = ('bmp', 'gif', 'jpeg', 'jpg', 'png'),
  maxsize = (3048, 2400))),
Field ("image_data", "blob"),
Field ("thumb", "upload", uploadfield = "thumb_data"),
Field ("thumb_data", "blob"),
auth.signature,
)

My code does this:

from cStringIO import StringIO
from PIL import Image

# Get the image
images_rec = db (db.images.id == image_id).select().first()
filename, stream = db.images.image.retrieve (images_rec.image)

# Open the image in PIL and make a thumnail
thumb_PIL = Image.open (stream)
thumb_PIL.thumbnail ((thumb_width, thumb_height), Image.ANTIALIAS)

# Create a file-like object and save the thumbnail to it.
thumb_file = StringIO()
thumb_PIL.save (thumb_file, "jpeg")

# Store the thumbnail
thumb_file.seek (0)
upload_image_rec.update_record (thumb = db.images.thumb.store (thumb_file, 
filename))

I've traced through the store function code in gluon/dal.py and it looks to 
me like the problem is here (line 8461 in version 2.0.8):

        if isinstance(self_uploadfield,Field):
            blob_uploadfield_name = self_uploadfield.uploadfield
            keys={self_uploadfield.name: newfilename,
                  blob_uploadfield_name: file.read()}
            self_uploadfield.table.insert(**keys)

self_uploadfield is of type "str" with a value of "thumb_data" and the test 
 "isinstance(self_uploadfield,Field)" fails. But I've checked carefully 
that the definition of the thumb and thumb_data fields follow the examples 
in the manual. 

I am confident that the image field is correct because I can retrieve and 
display the image from it. I also believe that the thumbnail is being 
created properly. At least, thumb_file.getvalue() returns a sensible 
looking block of data.

I am using web2py version 2.0.8 on MacOS 10.8. The database is hosted on 
Amazon RDS.

Thanks for any help you can give me.

-- 



Reply via email to