mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-27 01:34:24 +03:00
Adjust buffer size when quality=keep, fixes #148 (again)
This commit is contained in:
parent
fbc33970dd
commit
1e040feb1b
|
@ -684,7 +684,8 @@ def _save(im, fp, filename):
|
||||||
# https://github.com/jdriscoll/django-imagekit/issues/50
|
# https://github.com/jdriscoll/django-imagekit/issues/50
|
||||||
bufsize = 0
|
bufsize = 0
|
||||||
if "optimize" in info or "progressive" in info or "progression" in info:
|
if "optimize" in info or "progressive" in info or "progression" in info:
|
||||||
if quality >= 95:
|
# keep sets quality to 0, but the actual value may be high.
|
||||||
|
if quality >= 95 or quality == 0:
|
||||||
bufsize = 2 * im.size[0] * im.size[1]
|
bufsize = 2 * im.size[0] * im.size[1]
|
||||||
else:
|
else:
|
||||||
bufsize = im.size[0] * im.size[1]
|
bufsize = im.size[0] * im.size[1]
|
||||||
|
|
|
@ -3,6 +3,7 @@ from helper import djpeg_available, cjpeg_available
|
||||||
|
|
||||||
import random
|
import random
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
import os
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from PIL import ImageFile
|
from PIL import ImageFile
|
||||||
|
@ -334,6 +335,24 @@ class TestFileJpeg(PillowTestCase):
|
||||||
self.assertEqual(tag_ids['RelatedImageWidth'], 0x1001)
|
self.assertEqual(tag_ids['RelatedImageWidth'], 0x1001)
|
||||||
self.assertEqual(tag_ids['RelatedImageLength'], 0x1002)
|
self.assertEqual(tag_ids['RelatedImageLength'], 0x1002)
|
||||||
|
|
||||||
|
def test_MAXBLOCK_scaling(self):
|
||||||
|
def gen_random_image(size):
|
||||||
|
""" Generates a very hard to compress file
|
||||||
|
:param size: tuple
|
||||||
|
"""
|
||||||
|
return Image.frombytes('RGB',size, os.urandom(size[0]*size[1] *3))
|
||||||
|
|
||||||
|
im = gen_random_image((512,512))
|
||||||
|
f = self.tempfile("temp.jpeg")
|
||||||
|
im.save(f, quality=100, optimize=True)
|
||||||
|
|
||||||
|
reloaded = Image.open(f)
|
||||||
|
|
||||||
|
# none of these should crash
|
||||||
|
reloaded.save(f, quality='keep')
|
||||||
|
reloaded.save(f, quality='keep', progressive=True)
|
||||||
|
reloaded.save(f, quality='keep', optimize=True)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user