Hi Sergio, I might be loading the image in memory, but it sure seems 1000x faster when you reach images the size of 10 megs and more.
The image is loaded in memory anyways in the django.forms.fields.ImageField , isn't it ? I'm wondering why the db.models.fields.files.ImageFieldFile.save should be any different. Regards, Fredz./ On Jul 17, 3:56 pm, Sergio Oliveira <[email protected]> wrote: > sorry, it's not the same bug... > looks like your code is removing protection of reading the file in chunks, > so you could load a huge image in the memory which is not a good idea at > all. > the best think to do is create a ticket[1]. > > Do you know how to use svn? if yes, the only step to generate a patch is do > "svn diff" in the root of the repository. > > If you don't know svn book[2] is a good friend! ;) > > [1]http://code.djangoproject.com/simpleticket > [2]http://svnbook.red-bean.com > > Cheers, > > -- > Sergio Oliveira > > If builders built buildings the way programmers wrote programs, then the > first woodpecker that came along would destroy civilization. > > On Fri, Jul 17, 2009 at 21:44, Sergio Oliveira <[email protected]> wrote: > > Did you check the ticket #11158? The problem looks to be similar. > > >http://code.djangoproject.com/ticket/11158 > > > -- > > Sergio Oliveira > > > If builders built buildings the way programmers wrote programs, then the > > first woodpecker that came along would destroy civilization. > > > On Fri, Jul 17, 2009 at 20:41, Fredz./ <[email protected]> wrote: > > >> Here's some little benchmarks i've done. > >> Not very fancy benchmarks, but tests: > > >> 3.5 meg image: > >> (old code): fast > >> (new code) : fast > > >> 35 meg image: > >> (old code) : 1h30m or so.. (depending on the cpu, it could take > >> about 10 minutes on a good cpu) > >> (new code): 5-10 seconds (on the same old CPU that took 1.5 hours to > >> process). > > >> I've done the test multiple times to make sure the image didn't get > >> cached in some way. > > >> Cheers, > >> Fredz./ > > >> On Jul 17, 2:04 pm, "Fredz./" <[email protected]> wrote: > >> > I have a model that has a ImageField, and I uploaded a sample image of > >> > 35 megs. This image will be used at different places and resized for > >> > those different purposes. > > >> > I noticed that the django.core.files.images --> get_image_dimensions > >> > seems to be slow. > >> > It took more than an hour and a half to process that image by > >> > get_image_dimensions (I suspect the read(1024) being the cause) > > >> > So, i decided to attempt to optimize it. > > >> > Warning: I'm really not good in Python, so suggestions are welcome. > >> > The code is inspired by django.forms.fields.ImageField > > >> > Here's the code. PS: I'm not going to create a patch, because I really > >> > don't know how to. I do welcome anyone using this to create a patch > >> > tho! :) > > >> > def get_image_dimensions(file_or_path): > >> > """Returns the (width, height) of an image, given an open file or > >> > a path.""" > >> > from PIL import ImageFile as PILImageFile > >> > from PIL import Image > >> > p = PILImageFile.Parser() > > >> > """ > >> > NEW > >> > """ > > >> > if hasattr(file_or_path, 'read'): > >> > file = StringIO(file_or_path.read()) > >> > else: > >> > file = open(file_or_path, 'rb') > >> > file = StringIO(file.read()) > >> > try: > >> > trial_image = Image.open(file) > >> > trial_image.load() > >> > if hasattr(file, 'reset'): > >> > file.reset() > >> > if trial_image: > >> > return trial_image.size > > >> > except ImportError: > >> > raise > > >> > return None > > >> > """ > >> > OLD > >> > """ > >> > """ > >> > if hasattr(file_or_path, 'read'): > >> > file = file_or_path > >> > else: > >> > file = open(file_or_path, 'rb') > >> > while 1: > >> > data = file.read(1024) > >> > if not data: > >> > break > >> > p.feed(data) > >> > if p.image: > >> > return p.image.size > >> > return None > >> > """ > > >> > Please let me know what you think of the change. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---
