From 8911836b53c68fbca1656e6c8fafa1a0827d2e76 Mon Sep 17 00:00:00 2001 From: Matthew Tretter Date: Sat, 5 Nov 2011 21:20:36 -0400 Subject: [PATCH] Change how we set `ImageFile.MAXBLOCK` Previously, we set it to an arbitrary large number (which turned out not to be large enough in some cases). Since we may have been overriding something the user explicitly chose (and our value may be overridden by another app), that probably wasn't good. After this change, `MAXBLOCK` is only increased when it needs to be--and even then, only temporarily. --- imagekit/models.py | 5 ----- imagekit/utils.py | 9 +++++++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/imagekit/models.py b/imagekit/models.py index e5ed1bb..fb5d592 100755 --- a/imagekit/models.py +++ b/imagekit/models.py @@ -2,22 +2,17 @@ import os import datetime from StringIO import StringIO -from django.conf import settings from django.core.files.base import ContentFile from django.db import models from django.db.models.fields.files import ImageFieldFile from django.db.models.signals import post_save, post_delete from django.utils.encoding import force_unicode, smart_str -from imagekit.lib import Image, ImageFile from imagekit.utils import img_to_fobj, get_spec_files, open_image, \ format_to_extension, extension_to_format, UnknownFormatError, \ UnknownExtensionError from imagekit.processors import ProcessorPipeline -# Modify image file buffer size. -ImageFile.MAXBLOCK = getattr(settings, 'PIL_IMAGEFILE_MAXBLOCK', 256 * 2 ** 10) - class _ImageSpecMixin(object): def __init__(self, processors=None, quality=70, format=None): diff --git a/imagekit/utils.py b/imagekit/utils.py index 57c1e0b..325280a 100644 --- a/imagekit/utils.py +++ b/imagekit/utils.py @@ -21,10 +21,15 @@ def img_to_fobj(img, format, **kwargs): try: img.save(tmp, format, **kwargs) except IOError: + # PIL can have problems saving large JPEGs if MAXBLOCK isn't big enough, + # So if we have a problem saving, we temporarily increase it. See + # http://github.com/jdriscoll/django-imagekit/issues/50 old_maxblock = ImageFile.MAXBLOCK ImageFile.MAXBLOCK = img.size[0] * img.size[1] - img.save(tmp, format, **kwargs) - ImageFile.MAXBLOCK = old_maxblock + try: + img.save(tmp, format, **kwargs) + finally: + ImageFile.MAXBLOCK = old_maxblock tmp.seek(0) return tmp