mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-10 19:56:47 +03:00
Expand buffer size when optimizing or progressive
This commit is contained in:
parent
a04ba81e22
commit
0a28840bc4
|
@ -214,13 +214,20 @@ class TestFileJpeg:
|
|||
# Should not raise OSError for image with icc larger than image size.
|
||||
im.save(
|
||||
f,
|
||||
format="JPEG",
|
||||
progressive=True,
|
||||
quality=95,
|
||||
icc_profile=icc_profile,
|
||||
optimize=True,
|
||||
)
|
||||
|
||||
with Image.open("Tests/images/flower2.jpg") as im:
|
||||
f = str(tmp_path / "temp2.jpg")
|
||||
im.save(f, progressive=True, quality=94, icc_profile=b" " * 53955)
|
||||
|
||||
with Image.open("Tests/images/flower2.jpg") as im:
|
||||
f = str(tmp_path / "temp3.jpg")
|
||||
im.save(f, progressive=True, quality=94, exif=b" " * 43668)
|
||||
|
||||
def test_optimize(self):
|
||||
im1 = self.roundtrip(hopper())
|
||||
im2 = self.roundtrip(hopper(), optimize=0)
|
||||
|
|
|
@ -797,10 +797,14 @@ def _save(im, fp, filename):
|
|||
bufsize = 2 * im.size[0] * im.size[1]
|
||||
else:
|
||||
bufsize = im.size[0] * im.size[1]
|
||||
|
||||
# The EXIF info needs to be written as one block, + APP1, + one spare byte.
|
||||
# Ensure that our buffer is big enough. Same with the icc_profile block.
|
||||
bufsize = max(bufsize, len(exif) + 5, len(extra) + 1)
|
||||
if exif:
|
||||
bufsize += len(exif) + 5
|
||||
if extra:
|
||||
bufsize += len(extra) + 1
|
||||
else:
|
||||
# The EXIF info needs to be written as one block, + APP1, + one spare byte.
|
||||
# Ensure that our buffer is big enough. Same with the icc_profile block.
|
||||
bufsize = max(bufsize, len(exif) + 5, len(extra) + 1)
|
||||
|
||||
ImageFile._save(im, fp, [("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user