I got the same result with brianmac44's code. I also verified that the my resize_image() works when opening the file from the local filesystem - so I am somehow not passing the file in a manner that Image.open likes.
On Dec 22, 4:45 am, brianmac44 <anon1...@gmail.com> wrote: > I had the same problem two weeks ago. This is what I wrote: > > def resize_photo(self,content,size): > img = Image.open(ContentFile(content)) > img.thumbnail(size, Image.ANTIALIAS) > io = StringIO.StringIO() > img.save(io, 'PNG') > return ContentFile(io.getvalue()) > > Hope this helps. > > -Brian > > On Dec 22, 4:41 am, Merrick <merr...@gmail.com> wrote: > > > Thank you I tried that and I still get the same error. > > > I spent a little more time looking at PIL / Image.py and cleaning up > > the code. From what I can tell the Image.open method is having trouble > > with what I am passing to it. > > > def resize_image(file, size=(50, 50)): > > from PIL import Image > > from cStringIO import StringIO > > from django.core.files.base import ContentFile > > > image_data = StringIO(file.read()) > > > ### this line below is where the issue is ### > > image = Image.open(image_data) > > > if image.mode not in ('L', 'RGB'): > > image = image.convert('RGB') > > image.thumbnail(size, Image.ANTIALIAS) > > o = StringIO() > > image.save(o, "JPEG") > > return ContentFile(o.getvalue()) > > > This is how I call it: > > picture = pform.cleaned_data['picture'] > > thumbnail_content = resize_image(picture) > > > Thank you for looking at this. > > > On Dec 21, 3:08 pm, "j...@zigzap.com" <jlb2...@gmail.com> wrote: > > > > From what I can tell your not wrapping the thumbnailfilein > > > ContentFile your just returning the rawfilefrom the string IO. To > > > use the the ImageField django provides you must provide it with afile > > > that is in a special wrapper called ContentFile. I would suggest > > > trying this: > > > > from django.core.files.base import ContentFile (import this function > > > at the top of your view or where ever you put def resize_image) > > > > change the last line of def resize_image from "return o.getvalue()" to > > > "return ContentFile(o.getvalue())" > > > > I would also recommend changing "new_profile.picture.save(filename, > > > thumbnail_content)" to "new_profile.picture.save(filename, > > > thumbnail_content, save=False)" so that you are not hitting the > > > database twice. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---