From 7f275c1bfc167ab3a5af6c062d112fae6a0a7bbb Mon Sep 17 00:00:00 2001 From: Roger Baumgartner Date: Tue, 29 Jun 2021 18:07:29 -0700 Subject: [PATCH 001/163] Create BoxReader helper class to parse JPEG2000 header --- src/PIL/Jpeg2KImagePlugin.py | 115 ++++++++++++++++++++++++++--------- 1 file changed, 85 insertions(+), 30 deletions(-) diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index 0b0d433db41..5f416afefcc 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -19,6 +19,79 @@ from . import Image, ImageFile +class BoxReader: + """ + A small helper class to read fields stored in JPEG2000 header boxes + and to easily step into and read sub-boxes. + """ + + def __init__(self, fp, length=-1): + self.fp = fp + self.has_length = length >= 0 + self.length = length + self.remaining_in_box = -1 + + def _can_read(self, num_bytes): + if self.remaining_in_box >= 0: + # Inside box contents: ensure read does not go past box boundaries + return num_bytes <= self.remaining_in_box + elif self.has_length: + # Outside box: ensure we don't read past the known file length + return self.fp.tell() + num_bytes <= self.length + else: + return True # No length known, just read + + def _read_bytes(self, num_bytes): + if not self._can_read(num_bytes): + raise SyntaxError("Not enough data in header") + + data = self.fp.read(num_bytes) + if len(data) < num_bytes: + raise OSError( + f"Expected to read {num_bytes} bytes but only got {len(data)}." + ) + + if self.remaining_in_box > 0: + self.remaining_in_box -= num_bytes + return data + + def read_fields(self, field_format): + size = struct.calcsize(field_format) + data = self._read_bytes(size) + return struct.unpack(field_format, data) + + def read_boxes(self): + size = self.remaining_in_box + data = self._read_bytes(size) + return BoxReader(io.BytesIO(data), size) + + def has_next_box(self): + if self.has_length: + return self.fp.tell() + self.remaining_in_box < self.length + else: + return True + + def next_box_type(self): + # Skip the rest of the box if it has not been read + if self.remaining_in_box > 0: + self.fp.seek(self.remaining_in_box, os.SEEK_CUR) + self.remaining_in_box = -1 + + # Read the length and type of the next box + lbox, tbox = self.read_fields(">I4s") + if lbox == 1: + lbox = self.read_fields(">Q")[0] + hlen = 16 + else: + hlen = 8 + + if lbox < hlen or not self._can_read(lbox - hlen): + raise SyntaxError("Invalid header length") + + self.remaining_in_box = lbox - hlen + return tbox + + def _parse_codestream(fp): """Parse the JPEG 2000 codestream to extract the size and component count from the SIZ marker segment, returning a PIL (size, mode) tuple.""" @@ -58,50 +131,32 @@ def _parse_jp2_header(fp): color space information, returning a (size, mode, mimetype) tuple.""" # Find the JP2 header box + reader = BoxReader(fp) header = None mimetype = None - while True: - lbox, tbox = struct.unpack(">I4s", fp.read(8)) - if lbox == 1: - lbox = struct.unpack(">Q", fp.read(8))[0] - hlen = 16 - else: - hlen = 8 - - if lbox < hlen: - raise SyntaxError("Invalid JP2 header length") + while reader.has_next_box(): + tbox = reader.next_box_type() if tbox == b"jp2h": - header = fp.read(lbox - hlen) + header = reader.read_boxes() break elif tbox == b"ftyp": - if fp.read(4) == b"jpx ": + if reader.read_fields(">4s")[0] == b"jpx ": mimetype = "image/jpx" - fp.seek(lbox - hlen - 4, os.SEEK_CUR) - else: - fp.seek(lbox - hlen, os.SEEK_CUR) if header is None: - raise SyntaxError("could not find JP2 header") + raise SyntaxError("Could not find JP2 header") size = None mode = None bpc = None nc = None - hio = io.BytesIO(header) - while True: - lbox, tbox = struct.unpack(">I4s", hio.read(8)) - if lbox == 1: - lbox = struct.unpack(">Q", hio.read(8))[0] - hlen = 16 - else: - hlen = 8 - - content = hio.read(lbox - hlen) + while header.has_next_box(): + tbox = header.next_box_type() if tbox == b"ihdr": - height, width, nc, bpc, c, unkc, ipr = struct.unpack(">IIHBBBB", content) + height, width, nc, bpc, c, unkc, ipr = header.read_fields(">IIHBBBB") size = (width, height) if unkc: if nc == 1 and (bpc & 0x7F) > 8: @@ -116,9 +171,9 @@ def _parse_jp2_header(fp): mode = "RGBA" break elif tbox == b"colr": - meth, prec, approx = struct.unpack_from(">BBB", content) + meth, prec, approx = header.read_fields(">BBB") if meth == 1: - cs = struct.unpack_from(">I", content, 3)[0] + cs = header.read_fields(">I")[0] if cs == 16: # sRGB if nc == 1 and (bpc & 0x7F) > 8: mode = "I;16" @@ -145,7 +200,7 @@ def _parse_jp2_header(fp): break if size is None or mode is None: - raise SyntaxError("Malformed jp2 header") + raise SyntaxError("Malformed JP2 header") return (size, mode, mimetype) From 5f4653d0b477fd9f71329427bdf4165413400056 Mon Sep 17 00:00:00 2001 From: Roger Baumgartner Date: Wed, 30 Jun 2021 05:53:11 -0700 Subject: [PATCH 002/163] Attempt to read dpi information from JPEG2000's resc header box --- Tests/test_file_jpeg2k.py | 5 +++++ src/PIL/Jpeg2KImagePlugin.py | 40 ++++++++++++++++++++++++++++-------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py index 20280a57918..1af73a767cb 100644 --- a/Tests/test_file_jpeg2k.py +++ b/Tests/test_file_jpeg2k.py @@ -151,6 +151,11 @@ def test_reduce(): assert im.size == (40, 30) +def test_load_dpi(): + with Image.open("Tests/images/test-card-lossless.jp2") as im: + assert im.info["dpi"] == (71.9836, 71.9836) + + def test_layers_type(tmp_path): outfile = str(tmp_path / "temp_layers.jp2") for quality_layers in [[100, 50, 10], (100, 50, 10), None]: diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index 5f416afefcc..bbcfc0ef9a7 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -6,6 +6,7 @@ # # History: # 2014-03-12 ajh Created +# 2021-06-30 rogermb Extract dpi information from the 'resc' header box # # Copyright (c) 2014 Coriolis Systems Limited # Copyright (c) 2014 Alastair Houghton @@ -126,9 +127,21 @@ def _parse_codestream(fp): return (size, mode) +def _res_to_dpi(num, denom, exp): + """Convert JPEG2000's (numerator, denominator, exponent-base-10) resolution, + calculated as (num / denom) * 10^exp and stored in dots per meter, + to floating-point dots per inch.""" + if num == 0 or denom == 0: + raise SyntaxError( + f"Invalid JP2 resolution information: ({num} / {denom}) * 10^{exp}" + ) + return (254 * num * (10 ** exp)) / (10000 * denom) + + def _parse_jp2_header(fp): - """Parse the JP2 header box to extract size, component count and - color space information, returning a (size, mode, mimetype) tuple.""" + """Parse the JP2 header box to extract size, component count, + color space information, and optionally DPI information, + returning a (size, mode, mimetype, dpi) tuple.""" # Find the JP2 header box reader = BoxReader(fp) @@ -151,6 +164,8 @@ def _parse_jp2_header(fp): mode = None bpc = None nc = None + dpi = None # 2-tuple of DPI info, or None + unkc = 0 # Colorspace information unknown while header.has_next_box(): tbox = header.next_box_type() @@ -169,10 +184,9 @@ def _parse_jp2_header(fp): mode = "RGB" elif nc == 4: mode = "RGBA" - break elif tbox == b"colr": meth, prec, approx = header.read_fields(">BBB") - if meth == 1: + if meth == 1 and unkc == 0: cs = header.read_fields(">I")[0] if cs == 16: # sRGB if nc == 1 and (bpc & 0x7F) > 8: @@ -183,7 +197,6 @@ def _parse_jp2_header(fp): mode = "RGB" elif nc == 4: mode = "RGBA" - break elif cs == 17: # grayscale if nc == 1 and (bpc & 0x7F) > 8: mode = "I;16" @@ -191,18 +204,25 @@ def _parse_jp2_header(fp): mode = "L" elif nc == 2: mode = "LA" - break elif cs == 18: # sYCC if nc == 3: mode = "RGB" elif nc == 4: mode = "RGBA" - break + elif tbox == b"res ": + res = header.read_boxes() + while res.has_next_box(): + tres = res.next_box_type() + if tres == b"resc": + vrcn, vrcd, hrcn, hrcd, vrce, hrce = res.read_fields(">HHHHBB") + hres = _res_to_dpi(hrcn, hrcd, hrce) + vres = _res_to_dpi(vrcn, vrcd, vrce) + dpi = (hres, vres) if size is None or mode is None: raise SyntaxError("Malformed JP2 header") - return (size, mode, mimetype) + return (size, mode, mimetype, dpi) ## @@ -224,7 +244,9 @@ def _open(self): if sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a": self.codec = "jp2" header = _parse_jp2_header(self.fp) - self._size, self.mode, self.custom_mimetype = header + self._size, self.mode, self.custom_mimetype, dpi = header + if dpi is not None: + self.info["dpi"] = dpi else: raise SyntaxError("not a JPEG 2000 file") From 53ce23c74972d43971585a0d2f2e8ce850964fac Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 1 Jul 2021 16:55:53 +1000 Subject: [PATCH 003/163] 8.4.0.dev0 version bump --- src/PIL/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PIL/_version.py b/src/PIL/_version.py index c9825fdbae2..31f5daa4779 100644 --- a/src/PIL/_version.py +++ b/src/PIL/_version.py @@ -1,2 +1,2 @@ # Master version for Pillow -__version__ = "8.3.0" +__version__ = "8.4.0.dev0" From e7d1b2f4cb9c2eed09096fcdadbcd0cc600122f7 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 1 Jul 2021 12:40:25 +0300 Subject: [PATCH 004/163] Add support for Python 3.10 --- docs/installation.rst | 44 ++++++++++++++++++++++--------------------- setup.py | 3 ++- tox.ini | 2 +- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 06b1162c1b1..f024b2e4d98 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -15,27 +15,29 @@ Python Support Pillow supports these Python versions. -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| **Python** |**3.9**|**3.8**|**3.7**|**3.6**|**3.5**|**3.4**|**3.3**|**3.2**|**2.7**|**2.6**|**2.5**|**2.4**| -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow >= 8.0 | Yes | Yes | Yes | Yes | | | | | | | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow 7.0 - 7.2 | | Yes | Yes | Yes | Yes | | | | | | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow 6.2.1 - 6.2.2 | | Yes | Yes | Yes | Yes | | | | Yes | | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow 6.0 - 6.2.0 | | | Yes | Yes | Yes | | | | Yes | | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow 5.2 - 5.4 | | | Yes | Yes | Yes | Yes | | | Yes | | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow 5.0 - 5.1 | | | | Yes | Yes | Yes | | | Yes | | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow 4 | | | | Yes | Yes | Yes | Yes | | Yes | | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow 2 - 3 | | | | | Yes | Yes | Yes | Yes | Yes | Yes | | | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ -| Pillow < 2 | | | | | | | | | Yes | Yes | Yes | Yes | -+----------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Python |3.10 | 3.9 | 3.8 | 3.7 | 3.6 | 3.5 | 3.4 | 3.3 | 3.2 | 2.7 | 2.6 | 2.5 | 2.4 | ++======================+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+ +| Pillow >= 8.3 | Yes | Yes | Yes | Yes | Yes | | | | | | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 8.0 - 8.2 | | Yes | Yes | Yes | Yes | | | | | | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 7.0 - 7.2 | | | Yes | Yes | Yes | Yes | | | | | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 6.2.1 - 6.2.2 | | | Yes | Yes | Yes | Yes | | | | Yes | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 6.0 - 6.2.0 | | | | Yes | Yes | Yes | | | | Yes | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 5.2 - 5.4 | | | | Yes | Yes | Yes | Yes | | | Yes | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 5.0 - 5.1 | | | | | Yes | Yes | Yes | | | Yes | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 4 | | | | | Yes | Yes | Yes | Yes | | Yes | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 2 - 3 | | | | | | Yes | Yes | Yes | Yes | Yes | Yes | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow < 2 | | | | | | | | | | Yes | Yes | Yes | Yes | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ Basic Installation ------------------ diff --git a/setup.py b/setup.py index e75d8eea404..6dc4e1b77df 100755 --- a/setup.py +++ b/setup.py @@ -39,7 +39,7 @@ def get_version(): ZLIB_ROOT = None FUZZING_BUILD = "LIB_FUZZING_ENGINE" in os.environ -if sys.platform == "win32" and sys.version_info >= (3, 10): +if sys.platform == "win32" and sys.version_info >= (3, 11): import atexit atexit.register( @@ -1002,6 +1002,7 @@ def debug_build(): "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", diff --git a/tox.ini b/tox.ini index 2557d5067a8..cdc2ab88177 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,7 @@ [tox] envlist = lint - py{36,37,38,39,py3} + py{36,37,38,39,310,py3} minversion = 1.9 [testenv] From 26c5eb4bbc1d01fba923170ac0cc22b5c81d6066 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 1 Jul 2021 12:44:37 +0300 Subject: [PATCH 005/163] Add th headers to tables, newlines, fix typo --- docs/deprecations.rst | 3 +- .../writing-your-own-file-decoder.rst | 5 + docs/installation.rst | 217 +++++++++--------- 3 files changed, 116 insertions(+), 109 deletions(-) diff --git a/docs/deprecations.rst b/docs/deprecations.rst index 262ba79e0cc..9ce2fe7b329 100644 --- a/docs/deprecations.rst +++ b/docs/deprecations.rst @@ -135,7 +135,6 @@ Some attributes in :py:class:`PIL.ImageCms.CmsProfile` have been removed. From 6 they issued a ``DeprecationWarning``: ======================== =================================================== - Removed Use instead ======================== =================================================== ``color_space`` Padded :py:attr:`~.CmsProfile.xcolor_space` @@ -261,7 +260,7 @@ PIL.OleFileIO .. deprecated:: 4.0.0 .. versionremoved:: 6.0.0 -PIL.OleFileIO was removed as a vendored file and in Pillow 4.0.0 (2017-01) in favour of +PIL.OleFileIO was removed as a vendored file in Pillow 4.0.0 (2017-01) in favour of the upstream olefile Python package, and replaced with an ``ImportError`` in 5.0.0 (2018-01). The deprecated file has now been removed from Pillow. If needed, install from PyPI (eg. ``python3 -m pip install olefile``). diff --git a/docs/handbook/writing-your-own-file-decoder.rst b/docs/handbook/writing-your-own-file-decoder.rst index 9b670dba89f..7eb1dc113b1 100644 --- a/docs/handbook/writing-your-own-file-decoder.rst +++ b/docs/handbook/writing-your-own-file-decoder.rst @@ -195,12 +195,15 @@ table describes some commonly used **raw modes**: | mode | description | +===========+=================================================================+ | ``1`` | 1-bit bilevel, stored with the leftmost pixel in the most | +| | | | | significant bit. 0 means black, 1 means white. | +-----------+-----------------------------------------------------------------+ | ``1;I`` | 1-bit inverted bilevel, stored with the leftmost pixel in the | +| | | | | most significant bit. 0 means white, 1 means black. | +-----------+-----------------------------------------------------------------+ | ``1;R`` | 1-bit reversed bilevel, stored with the leftmost pixel in the | +| | | | | least significant bit. 0 means black, 1 means white. | +-----------+-----------------------------------------------------------------+ | ``L`` | 8-bit greyscale. 0 means black, 255 means white. | @@ -214,9 +217,11 @@ table describes some commonly used **raw modes**: | ``BGR`` | 24-bit true colour, stored as (blue, green, red). | +-----------+-----------------------------------------------------------------+ | ``RGBX`` | 24-bit true colour, stored as (red, green, blue, pad). The pad | +| | | | | pixels may vary. | +-----------+-----------------------------------------------------------------+ | ``RGB;L`` | 24-bit true colour, line interleaved (first all red pixels, then| +| | | | | all green pixels, finally all blue pixels). | +-----------+-----------------------------------------------------------------+ diff --git a/docs/installation.rst b/docs/installation.rst index f024b2e4d98..455ee20b834 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -439,41 +439,41 @@ Continuous Integration Targets These platforms are built and tested for every change. -+----------------------------------+--------------------------+-----------------------+ -|**Operating system** |**Tested Python versions**|**Tested architecture**| -+----------------------------------+--------------------------+-----------------------+ -| Alpine | 3.8 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Arch | 3.8 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Amazon Linux 2 | 3.7 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| CentOS 7 | 3.6 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| CentOS 8 | 3.6 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Debian 10 Buster | 3.7 |x86 | -+----------------------------------+--------------------------+-----------------------+ -| Fedora 33 | 3.9 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Fedora 34 | 3.9 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9, PyPy3|x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Ubuntu Linux 16.04 LTS (Xenial) | 3.6, 3.7, 3.8, 3.9, PyPy3|x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Ubuntu Linux 18.04 LTS (Bionic) | 3.6, 3.7, 3.8, 3.9, PyPy3|x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Ubuntu Linux 20.04 LTS (Focal) | 3.8 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Windows Server 2016 | 3.6 |x86-64 | -+----------------------------------+--------------------------+-----------------------+ -| Windows Server 2019 | 3.6, 3.7, 3.8, 3.9 |x86, x86-64 | -| +--------------------------+-----------------------+ -| | PyPy3 |x86 | -| +--------------------------+-----------------------+ -| | 3.8/MinGW |x86, x86-64 | -+----------------------------------+--------------------------+-----------------------+ ++----------------------------------+---------------------------+---------------------+ +| Operating system | Tested Python versions | Tested architecture | ++==================================+===========================+=====================+ +| Alpine | 3.8 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Arch | 3.8 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Amazon Linux 2 | 3.7 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| CentOS 7 | 3.6 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| CentOS 8 | 3.6 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Debian 10 Buster | 3.7 | x86 | ++----------------------------------+---------------------------+---------------------+ +| Fedora 33 | 3.9 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Fedora 34 | 3.9 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9, PyPy3 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Ubuntu Linux 16.04 LTS (Xenial) | 3.6, 3.7, 3.8, 3.9, PyPy3 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Ubuntu Linux 18.04 LTS (Bionic) | 3.6, 3.7, 3.8, 3.9, PyPy3 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Ubuntu Linux 20.04 LTS (Focal) | 3.8 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Windows Server 2016 | 3.6 | x86-64 | ++----------------------------------+---------------------------+---------------------+ +| Windows Server 2019 | 3.6, 3.7, 3.8, 3.9 | x86, x86-64 | +| +---------------------------+---------------------+ +| | PyPy3 | x86 | +| +---------------------------+---------------------+ +| | 3.8/MinGW | x86, x86-64 | ++----------------------------------+---------------------------+---------------------+ Other Platforms @@ -486,78 +486,81 @@ These platforms have been reported to work at the versions mentioned. Contributors please test Pillow on your platform then update this document and send a pull request. -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -|**Operating system** |**Tested Python versions** |**Latest tested Pillow version**|**Tested processors** | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.2.0 |arm | -| +------------------------------+--------------------------------+-----------------------+ -| | 3.6, 3.7, 3.8, 3.9 | 8.2.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.0.1 |x86-64 | -| +------------------------------+--------------------------------+ | -| | 3.5 | 7.2.0 | | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| macOS 10.14 Mojave | 3.5, 3.6, 3.7, 3.8 | 7.2.0 |x86-64 | -| +------------------------------+--------------------------------+ | -| | 2.7 | 6.0.0 | | -| +------------------------------+--------------------------------+ | -| | 3.4 | 5.4.1 | | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| macOS 10.13 High Sierra | 2.7, 3.4, 3.5, 3.6 | 4.2.1 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| macOS 10.12 Sierra | 2.7, 3.4, 3.5, 3.6 | 4.1.1 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Mac OS X 10.11 El Capitan | 2.7, 3.4, 3.5, 3.6, 3.7 | 5.4.1 |x86-64 | -| +------------------------------+--------------------------------+ | -| | 3.3 | 4.1.0 | | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Mac OS X 10.9 Mavericks | 2.7, 3.2, 3.3, 3.4 | 3.0.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Mac OS X 10.8 Mountain Lion | 2.6, 2.7, 3.2, 3.3 | |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Redhat Linux 6 | 2.6 | |x86 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| CentOS 6.3 | 2.7, 3.3 | |x86 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Fedora 23 | 2.7, 3.4 | 3.1.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Ubuntu Linux 12.04 LTS (Precise) | 2.6, 3.2, 3.3, 3.4, 3.5 | 3.4.1 |x86,x86-64 | -| | PyPy5.3.1, PyPy3 v2.4.0 | | | -| +------------------------------+--------------------------------+-----------------------+ -| | 2.7 | 4.3.0 |x86-64 | -| +------------------------------+--------------------------------+-----------------------+ -| | 2.7, 3.2 | 3.4.1 |ppc | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Ubuntu Linux 10.04 LTS (Lucid) | 2.6 | 2.3.0 |x86,x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Debian 8.2 Jessie | 2.7, 3.4 | 3.1.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Raspbian Jessie | 2.7, 3.4 | 3.1.0 |arm | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Raspbian Stretch | 2.7, 3.5 | 4.0.0 |arm | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Raspberry Pi OS | 3.6, 3.7, 3.8, 3.9 | 8.2.0 |arm | -| +------------------------------+--------------------------------+ | -| | 2.7 | 6.2.2 | | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Gentoo Linux | 2.7, 3.2 | 2.1.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| FreeBSD 11.1 | 2.7, 3.4, 3.5, 3.6 | 4.3.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| FreeBSD 10.3 | 2.7, 3.4, 3.5 | 4.2.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| FreeBSD 10.2 | 2.7, 3.4 | 3.1.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Windows 10 | 3.7 | 7.1.0 |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Windows 8.1 Pro | 2.6, 2.7, 3.2, 3.3, 3.4 | 2.4.0 |x86,x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Windows 8 Pro | 2.6, 2.7, 3.2, 3.3, 3.4a3 | 2.2.0 |x86,x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Windows 7 Professional | 3.7 | 7.0.0 |x86,x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ -| Windows Server 2008 R2 Enterprise| 3.3 | |x86-64 | -+----------------------------------+------------------------------+--------------------------------+-----------------------+ ++----------------------------------+------------------------------+----------------+------------+ +| Operating system | Tested Python | Latest tested | Tested | +| | | | | +| | versions | Pillow version | processors | ++==================================+==============================+================+============+ +| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.2.0 | arm | +| +------------------------------+----------------+------------+ +| | 3.6, 3.7, 3.8, 3.9 | 8.2.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.0.1 | x86-64 | +| +------------------------------+----------------+ | +| | 3.5 | 7.2.0 | | ++----------------------------------+------------------------------+----------------+------------+ +| macOS 10.14 Mojave | 3.5, 3.6, 3.7, 3.8 | 7.2.0 | x86-64 | +| +------------------------------+----------------+ | +| | 2.7 | 6.0.0 | | +| +------------------------------+----------------+ | +| | 3.4 | 5.4.1 | | ++----------------------------------+------------------------------+----------------+------------+ +| macOS 10.13 High Sierra | 2.7, 3.4, 3.5, 3.6 | 4.2.1 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| macOS 10.12 Sierra | 2.7, 3.4, 3.5, 3.6 | 4.1.1 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Mac OS X 10.11 El Capitan | 2.7, 3.4, 3.5, 3.6, 3.7 | 5.4.1 | x86-64 | +| +------------------------------+----------------+ | +| | 3.3 | 4.1.0 | | ++----------------------------------+------------------------------+----------------+------------+ +| Mac OS X 10.9 Mavericks | 2.7, 3.2, 3.3, 3.4 | 3.0.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Mac OS X 10.8 Mountain Lion | 2.6, 2.7, 3.2, 3.3 | | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Redhat Linux 6 | 2.6 | | x86 | ++----------------------------------+------------------------------+----------------+------------+ +| CentOS 6.3 | 2.7, 3.3 | | x86 | ++----------------------------------+------------------------------+----------------+------------+ +| Fedora 23 | 2.7, 3.4 | 3.1.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Ubuntu Linux 12.04 LTS (Precise) | 2.6, 3.2, 3.3, 3.4, 3.5, | 3.4.1 | x86,x86-64 | +| | | | | +| | PyPy5.3.1, PyPy3 v2.4.0 | | | +| +------------------------------+----------------+------------+ +| | 2.7 | 4.3.0 | x86-64 | +| +------------------------------+----------------+------------+ +| | 2.7, 3.2 | 3.4.1 | ppc | ++----------------------------------+------------------------------+----------------+------------+ +| Ubuntu Linux 10.04 LTS (Lucid) | 2.6 | 2.3.0 | x86,x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Debian 8.2 Jessie | 2.7, 3.4 | 3.1.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Raspbian Jessie | 2.7, 3.4 | 3.1.0 | arm | ++----------------------------------+------------------------------+----------------+------------+ +| Raspbian Stretch | 2.7, 3.5 | 4.0.0 | arm | ++----------------------------------+------------------------------+----------------+------------+ +| Raspberry Pi OS | 3.6, 3.7, 3.8, 3.9 | 8.2.0 | arm | +| +------------------------------+----------------+ | +| | 2.7 | 6.2.2 | | ++----------------------------------+------------------------------+----------------+------------+ +| Gentoo Linux | 2.7, 3.2 | 2.1.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| FreeBSD 11.1 | 2.7, 3.4, 3.5, 3.6 | 4.3.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| FreeBSD 10.3 | 2.7, 3.4, 3.5 | 4.2.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| FreeBSD 10.2 | 2.7, 3.4 | 3.1.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Windows 10 | 3.7 | 7.1.0 | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Windows 8.1 Pro | 2.6, 2.7, 3.2, 3.3, 3.4 | 2.4.0 | x86,x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Windows 8 Pro | 2.6, 2.7, 3.2, 3.3, 3.4a3 | 2.2.0 | x86,x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Windows 7 Professional | 3.7 | 7.0.0 | x86,x86-64 | ++----------------------------------+------------------------------+----------------+------------+ +| Windows Server 2008 R2 Enterprise| 3.3 | | x86-64 | ++----------------------------------+------------------------------+----------------+------------+ Old Versions ------------ From 95cf343df49f56487a950a91e5578f4d792427cc Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 1 Jul 2021 13:30:19 +0300 Subject: [PATCH 006/163] Split support table to fit on page --- docs/installation.rst | 50 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 455ee20b834..ad6bcd20b8b 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -15,29 +15,33 @@ Python Support Pillow supports these Python versions. -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Python |3.10 | 3.9 | 3.8 | 3.7 | 3.6 | 3.5 | 3.4 | 3.3 | 3.2 | 2.7 | 2.6 | 2.5 | 2.4 | -+======================+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+ -| Pillow >= 8.3 | Yes | Yes | Yes | Yes | Yes | | | | | | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 8.0 - 8.2 | | Yes | Yes | Yes | Yes | | | | | | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 7.0 - 7.2 | | | Yes | Yes | Yes | Yes | | | | | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 6.2.1 - 6.2.2 | | | Yes | Yes | Yes | Yes | | | | Yes | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 6.0 - 6.2.0 | | | | Yes | Yes | Yes | | | | Yes | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 5.2 - 5.4 | | | | Yes | Yes | Yes | Yes | | | Yes | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 5.0 - 5.1 | | | | | Yes | Yes | Yes | | | Yes | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 4 | | | | | Yes | Yes | Yes | Yes | | Yes | | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 2 - 3 | | | | | | Yes | Yes | Yes | Yes | Yes | Yes | | | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow < 2 | | | | | | | | | | Yes | Yes | Yes | Yes | -+----------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +| Python |3.10 | 3.9 | 3.8 | 3.7 | 3.6 | 3.5 | 3.4 | 2.7 | ++======================+=====+=====+=====+=====+=====+=====+=====+=====+ +| Pillow >= 8.3 | Yes | Yes | Yes | Yes | Yes | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 8.0 - 8.2 | | Yes | Yes | Yes | Yes | | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 7.0 - 7.2 | | | Yes | Yes | Yes | Yes | | | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 6.2.1 - 6.2.2 | | | Yes | Yes | Yes | Yes | | Yes | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 6.0 - 6.2.0 | | | | Yes | Yes | Yes | | Yes | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 5.2 - 5.4 | | | | Yes | Yes | Yes | Yes | Yes | ++----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ + ++------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Python | 3.6 | 3.5 | 3.4 | 3.3 | 3.2 | 2.7 | 2.6 | 2.5 | 2.4 | ++==================+=====+=====+=====+=====+=====+=====+=====+=====+=====+ +| Pillow 5.0 - 5.1 | Yes | Yes | Yes | | | Yes | | | | ++------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 4 | Yes | Yes | Yes | Yes | | Yes | | | | ++------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow 2 - 3 | | Yes | Yes | Yes | Yes | Yes | Yes | | | ++------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +| Pillow < 2 | | | | | | Yes | Yes | Yes | Yes | ++------------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+ Basic Installation ------------------ From 1c03526b6527df9f2d206708ce16b721aad06538 Mon Sep 17 00:00:00 2001 From: Thomas Viehmann Date: Thu, 1 Jul 2021 13:09:40 +0200 Subject: [PATCH 007/163] Make Image.__array__ take optional dtype argument This is required by the numpy protocol. --- Tests/test_image_array.py | 7 +++++++ src/PIL/Image.py | 7 +++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Tests/test_image_array.py b/Tests/test_image_array.py index 4dbbdd218b2..c4e124ee551 100644 --- a/Tests/test_image_array.py +++ b/Tests/test_image_array.py @@ -14,6 +14,10 @@ def test(mode): ai = numpy.array(im.convert(mode)) return ai.shape, ai.dtype.str, ai.nbytes + def test_with_dtype(dtype): + ai = numpy.array(im, dtype=dtype) + assert ai.dtype == dtype + # assert test("1") == ((100, 128), '|b1', 1600)) assert test("L") == ((100, 128), "|u1", 12800) @@ -27,6 +31,9 @@ def test(mode): assert test("RGBA") == ((100, 128, 4), "|u1", 51200) assert test("RGBX") == ((100, 128, 4), "|u1", 51200) + test_with_dtype(numpy.float) + test_with_dtype(numpy.uint8) + with Image.open("Tests/images/truncated_jpeg.jpg") as im_truncated: with pytest.raises(OSError): numpy.array(im_truncated) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 9debddeec9d..98dfec7269d 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -681,7 +681,7 @@ def _repr_png_(self): raise ValueError("Could not save to PNG for display") from e return b.getvalue() - def __array__(self): + def __array__(self, dtype=None): # numpy array interface support import numpy as np @@ -700,7 +700,10 @@ def __array__(self): class ArrayData: __array_interface__ = new - return np.array(ArrayData()) + arr = np.array(ArrayData()) + if dtype is not None: + arr = arr.astype(dtype) + return arr def __getstate__(self): return [self.info, self.mode, self.size, self.getpalette(), self.tobytes()] From 73f6cf22f345065ad0463fcdb2a41b213b000df4 Mon Sep 17 00:00:00 2001 From: Thomas Viehmann Date: Thu, 1 Jul 2021 14:06:13 +0200 Subject: [PATCH 008/163] Use numpy.float64 instead of numpy.float to avoid deprecation (thank you radarhere) --- Tests/test_image_array.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_image_array.py b/Tests/test_image_array.py index c4e124ee551..850dc2aaa3e 100644 --- a/Tests/test_image_array.py +++ b/Tests/test_image_array.py @@ -31,7 +31,7 @@ def test_with_dtype(dtype): assert test("RGBA") == ((100, 128, 4), "|u1", 51200) assert test("RGBX") == ((100, 128, 4), "|u1", 51200) - test_with_dtype(numpy.float) + test_with_dtype(numpy.float64) test_with_dtype(numpy.uint8) with Image.open("Tests/images/truncated_jpeg.jpg") as im_truncated: From 8d1b433c76c8aea0416224e99f58782d793f5925 Mon Sep 17 00:00:00 2001 From: Thomas Viehmann Date: Thu, 1 Jul 2021 14:08:51 +0200 Subject: [PATCH 009/163] Use numpy.array with dtype Thank you @radarhere. Co-authored-by: Andrew Murray <3112309+radarhere@users.noreply.github.com> --- src/PIL/Image.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 98dfec7269d..6017882aa8c 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -700,10 +700,7 @@ def __array__(self, dtype=None): class ArrayData: __array_interface__ = new - arr = np.array(ArrayData()) - if dtype is not None: - arr = arr.astype(dtype) - return arr + return np.array(ArrayData(), dtype) def __getstate__(self): return [self.info, self.mode, self.size, self.getpalette(), self.tobytes()] From 45d5848c30dbf3300c2e0b9138e2d7535b6ed56a Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 2 Jul 2021 18:59:12 +1000 Subject: [PATCH 010/163] Use line blocks instead of blank lines --- docs/conf.py | 1 + .../writing-your-own-file-decoder.rst | 61 +++++++++---------- docs/installation.rst | 5 +- docs/resources/css/styles.css | 4 ++ 4 files changed, 35 insertions(+), 36 deletions(-) create mode 100644 docs/resources/css/styles.css diff --git a/docs/conf.py b/docs/conf.py index 9b4eb669b7c..80728196577 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -312,6 +312,7 @@ def setup(app): app.add_js_file("js/script.js") + app.add_css_file("css/styles.css") app.add_css_file("css/dark.css") app.add_css_file("css/light.css") diff --git a/docs/handbook/writing-your-own-file-decoder.rst b/docs/handbook/writing-your-own-file-decoder.rst index 7eb1dc113b1..5f600a66786 100644 --- a/docs/handbook/writing-your-own-file-decoder.rst +++ b/docs/handbook/writing-your-own-file-decoder.rst @@ -191,39 +191,34 @@ match PIL’s internal pixel layout. PIL supports a large set of raw modes; for complete list, see the table in the :file:`Unpack.c` module. The following table describes some commonly used **raw modes**: -+-----------+-----------------------------------------------------------------+ -| mode | description | -+===========+=================================================================+ -| ``1`` | 1-bit bilevel, stored with the leftmost pixel in the most | -| | | -| | significant bit. 0 means black, 1 means white. | -+-----------+-----------------------------------------------------------------+ -| ``1;I`` | 1-bit inverted bilevel, stored with the leftmost pixel in the | -| | | -| | most significant bit. 0 means white, 1 means black. | -+-----------+-----------------------------------------------------------------+ -| ``1;R`` | 1-bit reversed bilevel, stored with the leftmost pixel in the | -| | | -| | least significant bit. 0 means black, 1 means white. | -+-----------+-----------------------------------------------------------------+ -| ``L`` | 8-bit greyscale. 0 means black, 255 means white. | -+-----------+-----------------------------------------------------------------+ -| ``L;I`` | 8-bit inverted greyscale. 0 means white, 255 means black. | -+-----------+-----------------------------------------------------------------+ -| ``P`` | 8-bit palette-mapped image. | -+-----------+-----------------------------------------------------------------+ -| ``RGB`` | 24-bit true colour, stored as (red, green, blue). | -+-----------+-----------------------------------------------------------------+ -| ``BGR`` | 24-bit true colour, stored as (blue, green, red). | -+-----------+-----------------------------------------------------------------+ -| ``RGBX`` | 24-bit true colour, stored as (red, green, blue, pad). The pad | -| | | -| | pixels may vary. | -+-----------+-----------------------------------------------------------------+ -| ``RGB;L`` | 24-bit true colour, line interleaved (first all red pixels, then| -| | | -| | all green pixels, finally all blue pixels). | -+-----------+-----------------------------------------------------------------+ ++-----------+-------------------------------------------------------------------+ +| mode | description | ++===========+===================================================================+ +| ``1`` | | 1-bit bilevel, stored with the leftmost pixel in the most | +| | | significant bit. 0 means black, 1 means white. | ++-----------+-------------------------------------------------------------------+ +| ``1;I`` | | 1-bit inverted bilevel, stored with the leftmost pixel in the | +| | | most significant bit. 0 means white, 1 means black. | ++-----------+-------------------------------------------------------------------+ +| ``1;R`` | | 1-bit reversed bilevel, stored with the leftmost pixel in the | +| | | least significant bit. 0 means black, 1 means white. | ++-----------+-------------------------------------------------------------------+ +| ``L`` | 8-bit greyscale. 0 means black, 255 means white. | ++-----------+-------------------------------------------------------------------+ +| ``L;I`` | 8-bit inverted greyscale. 0 means white, 255 means black. | ++-----------+-------------------------------------------------------------------+ +| ``P`` | 8-bit palette-mapped image. | ++-----------+-------------------------------------------------------------------+ +| ``RGB`` | 24-bit true colour, stored as (red, green, blue). | ++-----------+-------------------------------------------------------------------+ +| ``BGR`` | 24-bit true colour, stored as (blue, green, red). | ++-----------+-------------------------------------------------------------------+ +| ``RGBX`` | | 24-bit true colour, stored as (red, green, blue, pad). The pad | +| | | pixels may vary. | ++-----------+-------------------------------------------------------------------+ +| ``RGB;L`` | | 24-bit true colour, line interleaved (first all red pixels, then| +| | | all green pixels, finally all blue pixels). | ++-----------+-------------------------------------------------------------------+ Note that for the most common cases, the raw mode is simply the same as the mode. diff --git a/docs/installation.rst b/docs/installation.rst index ad6bcd20b8b..cb40c0ca959 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -527,9 +527,8 @@ These platforms have been reported to work at the versions mentioned. +----------------------------------+------------------------------+----------------+------------+ | Fedora 23 | 2.7, 3.4 | 3.1.0 | x86-64 | +----------------------------------+------------------------------+----------------+------------+ -| Ubuntu Linux 12.04 LTS (Precise) | 2.6, 3.2, 3.3, 3.4, 3.5, | 3.4.1 | x86,x86-64 | -| | | | | -| | PyPy5.3.1, PyPy3 v2.4.0 | | | +| Ubuntu Linux 12.04 LTS (Precise) | | 2.6, 3.2, 3.3, 3.4, 3.5, | 3.4.1 | x86,x86-64 | +| | | PyPy5.3.1, PyPy3 v2.4.0 | | | | +------------------------------+----------------+------------+ | | 2.7 | 4.3.0 | x86-64 | | +------------------------------+----------------+------------+ diff --git a/docs/resources/css/styles.css b/docs/resources/css/styles.css new file mode 100644 index 00000000000..51a5b602990 --- /dev/null +++ b/docs/resources/css/styles.css @@ -0,0 +1,4 @@ +.rst-content td .line-block { + font-size: 1rem; + margin-bottom: 0; +} From 9aab18c5e907f67d4b5b18476e742eaa1f74a05c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 2 Jul 2021 18:59:48 +1000 Subject: [PATCH 011/163] Removed bottom gap in table headings --- docs/resources/css/styles.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/resources/css/styles.css b/docs/resources/css/styles.css index 51a5b602990..13e9de8f6c0 100644 --- a/docs/resources/css/styles.css +++ b/docs/resources/css/styles.css @@ -1,3 +1,7 @@ +th p { + margin-bottom: 0; +} + .rst-content td .line-block { font-size: 1rem; margin-bottom: 0; From 8996b9ff9ab7a7498cd893063e68c9dac305579a Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 2 Jul 2021 22:18:18 +1000 Subject: [PATCH 012/163] Used line block in table heading --- docs/installation.rst | 147 +++++++++++++++++----------------- docs/resources/css/styles.css | 2 +- 2 files changed, 74 insertions(+), 75 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index cb40c0ca959..5fe1963c97c 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -490,80 +490,79 @@ These platforms have been reported to work at the versions mentioned. Contributors please test Pillow on your platform then update this document and send a pull request. -+----------------------------------+------------------------------+----------------+------------+ -| Operating system | Tested Python | Latest tested | Tested | -| | | | | -| | versions | Pillow version | processors | -+==================================+==============================+================+============+ -| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.2.0 | arm | -| +------------------------------+----------------+------------+ -| | 3.6, 3.7, 3.8, 3.9 | 8.2.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.0.1 | x86-64 | -| +------------------------------+----------------+ | -| | 3.5 | 7.2.0 | | -+----------------------------------+------------------------------+----------------+------------+ -| macOS 10.14 Mojave | 3.5, 3.6, 3.7, 3.8 | 7.2.0 | x86-64 | -| +------------------------------+----------------+ | -| | 2.7 | 6.0.0 | | -| +------------------------------+----------------+ | -| | 3.4 | 5.4.1 | | -+----------------------------------+------------------------------+----------------+------------+ -| macOS 10.13 High Sierra | 2.7, 3.4, 3.5, 3.6 | 4.2.1 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| macOS 10.12 Sierra | 2.7, 3.4, 3.5, 3.6 | 4.1.1 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Mac OS X 10.11 El Capitan | 2.7, 3.4, 3.5, 3.6, 3.7 | 5.4.1 | x86-64 | -| +------------------------------+----------------+ | -| | 3.3 | 4.1.0 | | -+----------------------------------+------------------------------+----------------+------------+ -| Mac OS X 10.9 Mavericks | 2.7, 3.2, 3.3, 3.4 | 3.0.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Mac OS X 10.8 Mountain Lion | 2.6, 2.7, 3.2, 3.3 | | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Redhat Linux 6 | 2.6 | | x86 | -+----------------------------------+------------------------------+----------------+------------+ -| CentOS 6.3 | 2.7, 3.3 | | x86 | -+----------------------------------+------------------------------+----------------+------------+ -| Fedora 23 | 2.7, 3.4 | 3.1.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Ubuntu Linux 12.04 LTS (Precise) | | 2.6, 3.2, 3.3, 3.4, 3.5, | 3.4.1 | x86,x86-64 | -| | | PyPy5.3.1, PyPy3 v2.4.0 | | | -| +------------------------------+----------------+------------+ -| | 2.7 | 4.3.0 | x86-64 | -| +------------------------------+----------------+------------+ -| | 2.7, 3.2 | 3.4.1 | ppc | -+----------------------------------+------------------------------+----------------+------------+ -| Ubuntu Linux 10.04 LTS (Lucid) | 2.6 | 2.3.0 | x86,x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Debian 8.2 Jessie | 2.7, 3.4 | 3.1.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Raspbian Jessie | 2.7, 3.4 | 3.1.0 | arm | -+----------------------------------+------------------------------+----------------+------------+ -| Raspbian Stretch | 2.7, 3.5 | 4.0.0 | arm | -+----------------------------------+------------------------------+----------------+------------+ -| Raspberry Pi OS | 3.6, 3.7, 3.8, 3.9 | 8.2.0 | arm | -| +------------------------------+----------------+ | -| | 2.7 | 6.2.2 | | -+----------------------------------+------------------------------+----------------+------------+ -| Gentoo Linux | 2.7, 3.2 | 2.1.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| FreeBSD 11.1 | 2.7, 3.4, 3.5, 3.6 | 4.3.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| FreeBSD 10.3 | 2.7, 3.4, 3.5 | 4.2.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| FreeBSD 10.2 | 2.7, 3.4 | 3.1.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Windows 10 | 3.7 | 7.1.0 | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Windows 8.1 Pro | 2.6, 2.7, 3.2, 3.3, 3.4 | 2.4.0 | x86,x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Windows 8 Pro | 2.6, 2.7, 3.2, 3.3, 3.4a3 | 2.2.0 | x86,x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Windows 7 Professional | 3.7 | 7.0.0 | x86,x86-64 | -+----------------------------------+------------------------------+----------------+------------+ -| Windows Server 2008 R2 Enterprise| 3.3 | | x86-64 | -+----------------------------------+------------------------------+----------------+------------+ ++----------------------------------+---------------------------+------------------+--------------+ +| Operating system | | Tested Python | | Latest tested | | Tested | +| | | versions | | Pillow version | | processors | ++==================================+===========================+==================+==============+ +| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.2.0 |arm | +| +---------------------------+------------------+--------------+ +| | 3.6, 3.7, 3.8, 3.9 | 8.2.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.0.1 |x86-64 | +| +---------------------------+------------------+ | +| | 3.5 | 7.2.0 | | ++----------------------------------+---------------------------+------------------+--------------+ +| macOS 10.14 Mojave | 3.5, 3.6, 3.7, 3.8 | 7.2.0 |x86-64 | +| +---------------------------+------------------+ | +| | 2.7 | 6.0.0 | | +| +---------------------------+------------------+ | +| | 3.4 | 5.4.1 | | ++----------------------------------+---------------------------+------------------+--------------+ +| macOS 10.13 High Sierra | 2.7, 3.4, 3.5, 3.6 | 4.2.1 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| macOS 10.12 Sierra | 2.7, 3.4, 3.5, 3.6 | 4.1.1 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Mac OS X 10.11 El Capitan | 2.7, 3.4, 3.5, 3.6, 3.7 | 5.4.1 |x86-64 | +| +---------------------------+------------------+ | +| | 3.3 | 4.1.0 | | ++----------------------------------+---------------------------+------------------+--------------+ +| Mac OS X 10.9 Mavericks | 2.7, 3.2, 3.3, 3.4 | 3.0.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Mac OS X 10.8 Mountain Lion | 2.6, 2.7, 3.2, 3.3 | |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Redhat Linux 6 | 2.6 | |x86 | ++----------------------------------+---------------------------+------------------+--------------+ +| CentOS 6.3 | 2.7, 3.3 | |x86 | ++----------------------------------+---------------------------+------------------+--------------+ +| Fedora 23 | 2.7, 3.4 | 3.1.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Ubuntu Linux 12.04 LTS (Precise) | | 2.6, 3.2, 3.3, 3.4, 3.5 | 3.4.1 |x86,x86-64 | +| | | PyPy5.3.1, PyPy3 v2.4.0 | | | +| +---------------------------+------------------+--------------+ +| | 2.7 | 4.3.0 |x86-64 | +| +---------------------------+------------------+--------------+ +| | 2.7, 3.2 | 3.4.1 |ppc | ++----------------------------------+---------------------------+------------------+--------------+ +| Ubuntu Linux 10.04 LTS (Lucid) | 2.6 | 2.3.0 |x86,x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Debian 8.2 Jessie | 2.7, 3.4 | 3.1.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Raspbian Jessie | 2.7, 3.4 | 3.1.0 |arm | ++----------------------------------+---------------------------+------------------+--------------+ +| Raspbian Stretch | 2.7, 3.5 | 4.0.0 |arm | ++----------------------------------+---------------------------+------------------+--------------+ +| Raspberry Pi OS | 3.6, 3.7, 3.8, 3.9 | 8.2.0 |arm | +| +---------------------------+------------------+ | +| | 2.7 | 6.2.2 | | ++----------------------------------+---------------------------+------------------+--------------+ +| Gentoo Linux | 2.7, 3.2 | 2.1.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| FreeBSD 11.1 | 2.7, 3.4, 3.5, 3.6 | 4.3.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| FreeBSD 10.3 | 2.7, 3.4, 3.5 | 4.2.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| FreeBSD 10.2 | 2.7, 3.4 | 3.1.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Windows 10 | 3.7 | 7.1.0 |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Windows 8.1 Pro | 2.6, 2.7, 3.2, 3.3, 3.4 | 2.4.0 |x86,x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Windows 8 Pro | 2.6, 2.7, 3.2, 3.3, 3.4a3 | 2.2.0 |x86,x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Windows 7 Professional | 3.7 | 7.0.0 |x86,x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ +| Windows Server 2008 R2 Enterprise| 3.3 | |x86-64 | ++----------------------------------+---------------------------+------------------+--------------+ Old Versions ------------ diff --git a/docs/resources/css/styles.css b/docs/resources/css/styles.css index 13e9de8f6c0..111f84085b7 100644 --- a/docs/resources/css/styles.css +++ b/docs/resources/css/styles.css @@ -2,7 +2,7 @@ th p { margin-bottom: 0; } -.rst-content td .line-block { +.rst-content tr .line-block { font-size: 1rem; margin-bottom: 0; } From c0f619384cbccef86185b1cc1b4da9755b1e344b Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 4 Jul 2021 12:33:55 +1000 Subject: [PATCH 013/163] Added "exif" keyword argument to save Image.Exif instance --- Tests/test_file_tiff.py | 17 +++++++++++++---- docs/handbook/image-file-formats.rst | 5 +++++ src/PIL/TiffImagePlugin.py | 18 ++++++++++++++++-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 57f45bd09b2..94a3851c9cc 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -403,10 +403,8 @@ def test_ifd_tag_type(self): with Image.open("Tests/images/ifd_tag_type.tiff") as im: assert 0x8825 in im.tag_v2 - def test_exif(self): - with Image.open("Tests/images/ifd_tag_type.tiff") as im: - exif = im.getexif() - + def test_exif(self, tmp_path): + def check_exif(exif): assert sorted(exif.keys()) == [ 256, 257, @@ -439,6 +437,17 @@ def test_exif(self): assert gps[0] == b"\x03\x02\x00\x00" assert gps[18] == "WGS-84" + outfile = str(tmp_path / "temp.tif") + with Image.open("Tests/images/ifd_tag_type.tiff") as im: + exif = im.getexif() + check_exif(exif) + + im.save(outfile, exif=exif) + + with Image.open(outfile) as im: + exif = im.getexif() + check_exif(exif) + def test_exif_frames(self): # Test that EXIF data can change across frames with Image.open("Tests/images/g4-multi.tiff") as im: diff --git a/docs/handbook/image-file-formats.rst b/docs/handbook/image-file-formats.rst index 5d4e8349445..1b65ef23689 100644 --- a/docs/handbook/image-file-formats.rst +++ b/docs/handbook/image-file-formats.rst @@ -898,6 +898,11 @@ The :py:meth:`~PIL.Image.Image.save` method can take the following keyword argum require a matching type in :py:attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype` tagtype. +**exif** + Alternate keyword to "tiffinfo", for consistency with other formats. + + .. versionadded:: 8.4.0 + **compression** A string containing the desired compression method for the file. (valid only with libtiff installed) Valid compression diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index a5e2bb53d17..7a581bd3141 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1142,6 +1142,17 @@ def load_end(self): if not self.is_animated: self._close_exclusive_fp_after_loading = True + # reset buffered io handle in case fp + # was passed to libtiff, invalidating the buffer + self.fp.tell() + + # load IFD data from fp before it is closed + exif = self.getexif() + for key in TiffTags.TAGS_V2_GROUPS.keys(): + if key not in exif: + continue + exif.get_ifd(key) + def _load_libtiff(self): """Overload method triggered when we detect a compressed tiff Calls out to libtiff""" @@ -1504,12 +1515,15 @@ def _save(im, fp, filename): ifd[IMAGELENGTH] = im.size[1] # write any arbitrary tags passed in as an ImageFileDirectory - info = im.encoderinfo.get("tiffinfo", {}) + info = im.encoderinfo.get("tiffinfo", im.encoderinfo.get("exif", {})) logger.debug("Tiffinfo Keys: %s" % list(info)) if isinstance(info, ImageFileDirectory_v1): info = info.to_v2() for key in info: - ifd[key] = info.get(key) + if isinstance(info, Image.Exif) and key in TiffTags.TAGS_V2_GROUPS.keys(): + ifd[key] = info.get_ifd(key) + else: + ifd[key] = info.get(key) try: ifd.tagtype[key] = info.tagtype[key] except Exception: From 9707d33ed979433211af1934f0a07568d9809548 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 4 Jul 2021 13:32:41 +1000 Subject: [PATCH 014/163] Allow "exif" to also accept bytestring --- Tests/test_file_tiff.py | 7 +++++++ src/PIL/TiffImagePlugin.py | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 94a3851c9cc..4d485734015 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -444,10 +444,17 @@ def check_exif(exif): im.save(outfile, exif=exif) + outfile2 = str(tmp_path / "temp2.tif") with Image.open(outfile) as im: exif = im.getexif() check_exif(exif) + im.save(outfile2, exif=exif.tobytes()) + + with Image.open(outfile2) as im: + exif = im.getexif() + check_exif(exif) + def test_exif_frames(self): # Test that EXIF data can change across frames with Image.open("Tests/images/g4-multi.tiff") as im: diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index 7a581bd3141..b531e333cf8 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1515,7 +1515,16 @@ def _save(im, fp, filename): ifd[IMAGELENGTH] = im.size[1] # write any arbitrary tags passed in as an ImageFileDirectory - info = im.encoderinfo.get("tiffinfo", im.encoderinfo.get("exif", {})) + if "tiffinfo" in im.encoderinfo: + info = im.encoderinfo["tiffinfo"] + elif "exif" in im.encoderinfo: + info = im.encoderinfo["exif"] + if isinstance(info, bytes): + exif = Image.Exif() + exif.load(info) + info = exif + else: + info = {} logger.debug("Tiffinfo Keys: %s" % list(info)) if isinstance(info, ImageFileDirectory_v1): info = info.to_v2() From 9688507193eec047c78adb70dda82b9de7afe7bb Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 5 Jul 2021 23:02:26 +1000 Subject: [PATCH 015/163] Removed variable --- src/PIL/Image.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 6017882aa8c..124ca392b07 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -1832,18 +1832,16 @@ def remap_palette(self, dest_map, source_palette=None): if source_palette is None: if self.mode == "P": self.load() - real_source_palette = self.im.getpalette("RGB")[:768] + source_palette = self.im.getpalette("RGB")[:768] else: # L-mode - real_source_palette = bytearray(i // 3 for i in range(768)) - else: - real_source_palette = source_palette + source_palette = bytearray(i // 3 for i in range(768)) palette_bytes = b"" new_positions = [0] * 256 # pick only the used colors from the palette for i, oldPosition in enumerate(dest_map): - palette_bytes += real_source_palette[oldPosition * 3 : oldPosition * 3 + 3] + palette_bytes += source_palette[oldPosition * 3 : oldPosition * 3 + 3] new_positions[oldPosition] = i # replace the palette color id of all pixel with the new id From 917a598615bf3b0ceabdd3258101b4f31c647e2b Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 6 Jul 2021 10:37:28 +1000 Subject: [PATCH 016/163] Handle removing orientation from alternate types of EXIF data --- Tests/images/exif_imagemagick_orientation.png | Bin 0 -> 179399 bytes Tests/test_imageops.py | 22 ++++++++++++++++++ src/PIL/ImageOps.py | 17 ++++++++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 Tests/images/exif_imagemagick_orientation.png diff --git a/Tests/images/exif_imagemagick_orientation.png b/Tests/images/exif_imagemagick_orientation.png new file mode 100644 index 0000000000000000000000000000000000000000..819a0703f839d77643f1170567dba445db1fa173 GIT binary patch literal 179399 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

GFpb@-RI8MV9rh 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�KWjh2zH{ zi_t7pa9sJOedbPjDSmedVR--yGLSQn5H%t--g3fXaRkd*5tAaJA0zF_`pXi;GbEk? zdlqg|Ie$rPqcro6^yi+3ZJIj}oP7)i6-XW5+e!~pRkM$+Ky|pRydOp+t$x>*T?OYC zOlFmmhw`Ts9ZZ)d{_JaAYhfXRZ+ar13>*h97-BgX+hGIwh@@?95a79=lLAjH{X%2p*@6N(W{f z1yhAB@wH1^>+`=!MlaltX~W0WW6f0E*+9agCMSh9(E8z5MfI{4H#G+~#ce>UP2To$ zGMkjUiL#|^Sft=UlAN+fn71r7cE*GX;cd$6YYZp~LP4B?;MFu$P=(6pa}6i(6^Bg@ zoWJ`{kZdHy1l?co;}C^*N=*%G7@G06LMoH_1_rJ-F6onHIJR<|D*>b}lYv29&xb%V zNC}P}0LcLbh~&Bnbli5qli5*!ru9rT6!Ow{)V&ev@g%E3U zpX|wp1sdQ@%!q2zmbs*QnI5)qW0aLNP?dH7+o3X%IRR%TotY;AW{RCrj?`yMUw0wN z6@fBAk95PQ%8OE1ZlXeLFm6(y8Uc&JM_M2wF8Kag+|^EG^T){ktP#x=P+rhU7k`1ZL|Z*TpAiZE`0py$j+~U*HQU{^tP|0joh?PD(L) z-+fdD%3P1A35nn*Au4i?!_X>?*R?F5+_CKYbtBRtWttq$ee!nt{}Tjvn?eyZnl)xa z7Ri)0co2!AOh%bq+Z3^FIPM7DgKA5aw#O7c8@s7h5km_=2U9FYke1=h{U=!x3no>a zEIiBb_NjCa?`=I{@;k%doIM$;h|NWO3#i|tcLmm?yd#mgi$vW|{*U*PJ}mNX~P z@wcK~xauRJ2Xf=X7&Csry~Ynkq&#$gZMpwxTVi4xm3FNc?zM?zz-5iiIN9z$GK`3%q8u|#5E2SwH&apiK6{=UYX@!IUa7!#4HE47M zszTjfKehg_Rk}n+Ey1l?SH>Y9`m2G8WNuOr1%^ACC-0^&F_iQQiC>=65EFRv02~sq zB}9LW&>jXXN%p)-Y=(0>{TF>l_Y-_oP+I4WuU#Wp0T$-y*zO4D6o=O7S8djVp+MnD zTSq6!;x0;ZZC)-4e9GPSuTymh&Nl$!^3^jn^XzEj{1}4|^q+2XFY%L`ZXT-m9JN`* zwjW^iMdTxPd%#Hujs_5VR&^|uWdWE!Sh%4nbi)S3P7(`guUpG(rtk_FHvnTvj6qS; zrJ;rD8l31IHW2z1cU{Wk8!N74u?S|?V>Q8?Tu5^3T|N!kgBdMs40yauq7jONg&^V+ zVZg?93{m|_>&>C%SmI|AiHQ6kG0P>#>qlEOGy-9S2?{`((NzGxMot;j4E_6!&~lrx zCa3hnZSqDRP^<~ElA#gk&98j4Y18*$ex}JV{qo+p2tQLQDJ?P_?w#rxY0NFB&W%HG z+hOR(D+ui=f!VQYwzu4T7ehv&9e(q;Fdv;;2Ty2=_ZE^)7C&OxB~;@k+D>GiE>t*mmn6looW@1m^mUZlA#JIG(~dbt{4OqCOAVvS zNm{-j*HB5U4fyiqUzmR~lV$$XIcc|lW=L`CP>ZD7R^PRpj~B|M{y2Dj8f0^0w5USl zm>mS2BdCl5{tU~-RHLgq!!C#%HJ+_2(pOQ=K!8nzWN zhF<%t{OPzeWW8f_rcIYH8r!yQCmq{PI_g**+qP}nwr$(CZRhKL-e=~_oVov0)%L!2 z-Bq<#VK38sB0^hdL^sE!cMFu5%{abOgfwlQWgmNjs9@1wu?E=b<2PKp6Hy#O&2^@f z3;JWp5K)5Zb;p&KjXl6Y(Twfx<<^;RH4R)e;f1dmtFfcWSW%5)d9&Zgv%miEMzrWE zPZwH(Bt~Z94Z!y#w^H5CiUgLb4Fflv9ihZ<#ju5ti1*tpdEQ+T#n+Qohhfie>3S#nH z@P2$CrL)&zGlWFfw5R18wcL5~xeLj71lma*56TQdqSejsoR!E)9>61AD*a>}@Qq8{ zQ+m9tdGYOi*HDO#D~hTf{@b2Z;>2|_Y7SnIdZ*?6+DXig(oS0q4c%J7hSPUl-i|7^ zqfxwPj?d9|r|~M{A^0ead1yRmZf-6M&j-P^e-vSM!Gm}LM+ZXH0J@ScmGN7#SGw&n zS&xZFrIT>gHda{DDV*Fxp$`$Q-ZJXJ9gDXk&{sfcsO{6UjL0W6T3gk!`>`Yjc7w~4eEt0cM z?iZ)*)X?BDoR*0Dshfkd`fctM^7}Wc-}S;OSvU5 z!+F+xp1zLktChw^Zrnn!EEZ?!I6KceUpQ)?O?ElCdZKAYU9+wpciuUOHACc#{V}+0 z*$GgCB!4QaUvCcCsNEuf2mjA%Ebr5w<`_OZ0*zEP%K4r|(#PqfvwSEBvUY!=Dvh^x z$TxbBRE!VcoJ;8F0zyrMGLl5hvj~*^vsqQN@cn`3OdQEy8ha4)TenE26>Gt?cjcsb2*D-Va5_roz^;Nw+GMUf zKpY$Az{9Sh%N|pSq3EZ!T%(M841GszlhMnR+jdZO%6_@Qq*_&lp8HF8u|28Mi*eHF?Q!Th?+rSbXB+>oT4F%wrI^yAnFN9Vs}CtL3Lfz z$q`ot(81BPc@f^3=QM`2KHZ~-ZU-e;Q9Dx)&R2QRg!S%%J)A1UNJ2L%p&QD@Up_~? z$L~!SnH*kN2a&V=bf7|GpIuaTE4p2;=!A=)DWu3@zF6cI3PO8W!mVopaZ5I1H~MICL@v8O&Ki&QMmZ1 zwcd?q#^$irbf%U#=p36KiaMI~=c0#h?h9@&zeMX0nrmpET40y%&XucAV;bp!D<)n1 z0`So+uDyb$(Bl)NiAjrQQ6Kx5@~lCXX+;4f00H$=h*@{Q#A2BGDET(BXf0KyRC6K0 zIXl2(R2yWaQ}R$Q1<mF0L+6 z39%j>h~hWk51>qT?a&h%g0nFHlD=ZWZy6xZb=FV0hMCAW3sd0z+mTSbc@eyGaT1E1$Tt z!+7d}Zvn3+r`SXoFPRX1 zq{^ZV7P*a@^RAtTbgw}2L@H^X^I@xJH?}(h^!E1pc<0*%OJ2jq`qWs*$N>iDu^0a@XdZVA&-Gz zuvxmy>JUgq{%e*e6dM&Yqowh&dftt{*7!leCOMHXXD)xXY+$KZ#`In4-bT|E*9g4&7xnqRq8bI^j=EVlGndT97K^>(qIWe13oSz|w*ikKWy)@%65R4P0dED- zgoe#Ju^r!=);e@YUj-!~dF)$Ru$VZzGE-1X@1Ny0W!o8M76Czh zR+yiA3vonhGC*#Xv>;Tp#(y^XdtfD7gz{!Ssda~W^LKmW(H{3PiEmpoa}w6AY?B#LG&9E zZ?pQi`PzH?jfRQL_pT9qY0zHos%A;6D!Asp){-$V7T3Ln=G4ZpXX;V~$Avw7_RmBOg`>=71sE;o2A{ zXI z?W~8@jpK2;nhM^x=-yGsVaypiWzy$*t85Ws?M=$PEU)4}I$3FLX7h4Ej(_lV=%t8Q zc88;5%@kSLYs`n|3P81pc||A}0;ZPDUS*O$<>|ikse3ho71Z)Uj$ymvc&#wz@OwA^ zLEk&k?Yf5t;i`56 z47D2P8ERaJFKV=`L!2(<=r$N+qQ-=2-ZpyGYr}9Ft_GU$enYbwn)Yb%F;zP}DSY{4 zkm33L_bM58=2q8Smw__3B*ONae)1O$Re7Bc)lVlIrjIGOW5^$J+_rs9vWACtAe&Wj zqJg_^quF(9iA4!31B&NR+g3MRY|k9(!wrWHDvk}_8M18?fMAGB<0j2&H4_LlDqy6d zlXRS~gYldxq<&`Da}ud9X{WoEm5anUNE*?+Ih6b*u>Fa|dXPYF$;4ecM8Z-dzm49^ z)h00m?`0xMFD_=)Ugz<{Z7E{+wwr1t@v3_^#bf0(oeVAq58PIBXRpljL+65k{G72$ z&~9&c)sZ(quog32=nM2-SiHA7VSru+r!=Hm`5ZqH0!pV1L)Nd1QOzKN>aN-g1Wg`) zqEbrp<5c}j;ZZ{s4oMfNf3j&ZPxzl*YKPh*^F5D zoIq1+nx!tr3h3MT@a8)J?y{rfM78BwLQh4gjaGIm()bimZ8o#no+N4-uGlIxug|MwL%~&{5xQa#6@IT+!kM z&sesG=fn?(H))NGV?MzzTF`$~16PU*D`s#TL&DO5Y^KGbb%2#z&)8YZzrW1@|7Ijp%>{K zzA?4eKyzG4RF)rb$)M{`4y1^2lq{kttAhsPZBvdYJcT}i$D(*P9}QC zT)o8bb)>(-t|duv=H6AFtcTIWSwvi2H}y>1hJ(pJyQ7*-${K3%wfj&m3jq9T*CUI+ zMqKqJcM5UY1wEA2!qaREc-y_UaL_^D*C%4lJZ?LgxC25QkrJ06VS^UV>J1=QP_AWbyYKrPA? z7~G8^Qetx$qXagptm2ldmknjD(m?t3iy2J_;FH zq{^vY`qsE$^=yBKG@9^NknZ9XYwcQHSiTC~CcIG7r)}c;^e%F(MVaJWUJvxoGYjne zs)kcLR|U=}tcmP=weE&ijMf|=h(nnp3H6-!i29Y!mV+!ziEsHgW-g{OUPsLu<>w+{ zS=J{>7C;w4EWTYEmv9X^{rgzY(3ep-qnBSJzO6&B>4<#{w3FNy^1bV0qD%!kFiBB47=dmmwxVv9|`)X7o< z0~m4?w628;_^Tv;0=g4(F%Ux`-(w--{+?&W6_cuuyKCvovAD%4_!M@qw}|%=(;tkb z%_M+l2)aY)M4P;w$d1Y&e2b94Q#}@#K}Mk1d%{otI7Prj0&ns_3Om!8s#P2a!a_sZ zoy>q|bLsr8WQ2WjNOkM-bW@)ZWkWa+zzU>P*5=3X%>67~W8h`i#z1gDPtM~=ft@<; zQE2>8)=5eTi=1t&4Pf|NjkX0?t97r{LaRTr+F<}k{}Kz=e4W^fr_N9UtXtI!oz42J zo@*PIJSu!9Ir@C^ni;IoDSuTsjRyk!xEvcZV`B#Mp^jj*_2W!JIb3nVj3<3#H|Ym> z#jQIjqWg(+8ny}d@3Hj=WcF814j&YLk`Kr~uK;7$fKjo*>yeLR7x>I5+X@A4Qa z%K(o>uJdpDMuGB&JvEexypZ{!^zpku7q6+h^2~#QDx8WF7$>g1wPd#=D{#BFl4A8b z4A*y|+#l_biwH`J^OOE6Bg%4Y$1j>3Z=R70B5GgEW+OY}U}oGotJn)225Q+Tp6gGX zIZ3$&gN;!)U$O@I3a7aRiTCyf9c3ey$$wC<;*T*4reBW3DfAVH7Y>CZGdW_93{*`B z#HUEkT1Iww*!4+U@dYvpLXP1ba5v3b2Gw7E$Cej05?(A4xSdTMrq|rk0cm{9){vaxT8Pp8*jvAYdHE6cU;O zuz`hDhtZbCx6pA?7g=1x=37bNFS5d=<7g94@lhzjsoxy9X)@ZGqHSIw(_;QY`gpSA zD*+xZ8RUf8)5!+Sy|+1})hT(jo@o%f?0aNuIg=w5q4hQ^X}Wp=#*-$D+KB8NvD_N3z7$UGVc@#% zTP{eFLwfQ1UfL46u~1R`@}6=De)7?TL35wYM`2gHl*?{>+`y-(@mwlPXzCNEH!^>m zkwJg44FYfkeQk4V)ed9%>F%|Jq(R@uo4TTO{>T8U!!p-nbO5a=bf}A{m_1nW*4-lol;63& zx*E86UOhX%6A6>>qjXn7!K8BEHK%S6BwT>mQwC(mmexPHITFs$H4Ok=Itg@hQ^c*; z(neRn)g6!jxgI<0&kvfvmtLPoegvB`hCsEXcwPqa#s!$R%)aL5Or83=OxWg4HX&BRc?j<4g2;`{D$k;_?IRGcYC z=oSL_myl_hJUD<*qc_p3Ra-94yobCi20@(DX5}ZZ(8icDaU)-QeWsz{rafFahsS6f z(j9(N`%#!`5X28E27y}JY?MI4z(##TO(5j&Eo<1Tl+EqF`YWd7J_}%~e6tlEikQ2f zLbZeV`MI7huo&DTpp{)wLh55q@u2Bufj!8et+|%1gbp3Dq4NAP3{I>VB29&?lR)Mv zQgOxlswN6ouWg!6S+ha%N&DqMMk%P#!3$fvvc7V(*Bt zVzgKokpR-;VP_Cb!WQH) zIKT)ZQ}+Eg>geb-CXu)@SuRFG_d7e{ukk5>R70m}Hv~lfVECa3YAg!;&DZ1PF}FXVR(Ez+S0AkcU0KGjWVAK^XwjYA3BMbrvQI?iABVG!u>LCgH2i*`Ggvv%x6 zM?#3=Z_tY87T=}yv_%P+8ZS>NETi*{Ft0^*c)QG@h`0?Ut!-Rs8+u^vj-S|B7*B7M zQEt{XERULF!q!nfQ%rUwaL=HSskFh^gc z3eRC`?=`Z-BH?i=g4ZK++RM$xVY0_gFwjn;BDD4_{JkX)hLhnnQ#)xde)XGf3H;}_ zeK2BF;N{{4Jytb61YB1#ta`s)<{arNhRTeEk?ai!nuT`G=!Grc99LCtRCo3!WWgYDBkvGZ)09ro@&mQfjX(|i| z9uV5|M0eX5U!jv6`URbkuyK+NV44=diwF%)2-=(*@ji>w6^JxtJiLQzrwW%9v(!UE$MDpW-oR9(cX$B8pf zpm#GQaPCcRu#NGF{AD5bSq;t>FSYQ#82fAPyORahxes->wC;=;X2TiZvoQV<*{K=U z2iaC*2WWlm!sW6gm~bqOsWk^I6Bd2N$Cs4v;B?XG50UtfTew+WihRJHNuk@@O2-T) z;oe_(P)N^=XyBsX{xmcfqoUCw)j#91ApjjVMRD8?*b}qwxhvSw^I}S4uVfvqJ47ue z!QTL7IzCAyXkp)ET1Lfm>5Fl$_lG9O9*qe#DCedk9`0={BD0QV?iQrf@ib%{j)6XW zG&v2GO5hNdWFtt=*BVYPjK!;sO3yx|D7!{{1p-breMFt!mDt49J1`l)@yQij9~%5q5zT{EdN45X$#BrHGlPHSo=7=qw$ zlPv&zgHoG%Lm8NZ#K)IFR!J|=_O1mkq#+^7=7ihk2 z90w=%vrS6;30g;iY48#)v&d`DMX9P(XV>7;4)rVyC!rfNxXLG)OaRtjnT1(ZfUGE@ zt&gbgvzws*oIpJ*(<2q+d@zkly^BG4beA7#)Xr5qm#q&d5!V){iI;TP35MJ9Y+mjh zov$}va3lcesFwd&-A5s-`BnZZFpZ0ud~)Im!E?Xa+C6VBwt1}8M_Uj=9jeTZOZltS zGPV?4`Ns$-s|SwhW5s~OPi*QVY!ViINzL5+)dCGC;i`OU_wh%A=QP)B`(y{hDYGA> z&NdJ-j;pWfEpzFu4sc_I>sLTW+M3V3;(P!=G%%q6KqPKVw>r((S+^Xf&T$ubPG!2BtzKw7 zi`$F2d>=#q{N*du8&Dpq=aYS zeSR#{i%>?!oi12t-_5~Dp{;{O);7Sse^CWd$&m3)UWwDF3*S#KJLCe+Yt)WH08cOa z4^mA&wrR9?Z*%lRTu!cD(kkAURj%8dW;7Y`eq4bJ#HVJuqF(#EtlKg&42Y8104FYt z2u~I(p!viKBeUz{jb1C<@p1QFFbp&oPCW6_cQ|+g^mP=~{vJ%7Z7n!mxSR~8#{w9~ zGlL=LHt7wli-~ci+^ebgFVprkZwQ~UAJ$;`7$&&E2`3R@fT6o^jfQ*NSa&Aw<%A{Cr)68LR+nL~|#Ocgl&D z)7gPIFS%J5rav`;#V$)+PGqk6Ec&Ejr#>nY9;79)lp5phDL<72;US9)S~fsUpK(IY z+DguYiq$0EVB~O<*36AZ5%MEv7|BU8p5l85tD(3lHP<`A%Z zJRDQeUokZNnL~F7RdYtCw?4n5QL5O_leuoj3F}=+B!kN;OFJtX3SdY!1cNqU^e$jA z>49G13Is@x(dqP@_S9@~eL^x1WbNmoW^-Nr;|XP>ANWTeM5%GzO8OIGmzyGyx5R{R zh(wQp=&@jo0c@IDe7kjPJw02K?b}PMNSF-(rR|I&GGv1(M(J9({>740)hT~C#nPSR zvEb`!qL$1n>dl0MZYMaktQ5Yr8qE7bH~QilUG=w2-(fDOZaWDgrk@dph>RwrL)5J`CovV4+C#+hNqT$17ZqjhT^Ceo!_q zdX}x0A#w?l+K~8YKc+xJ&zs-xyNu>-dJ8(Dn;;!wMI~Bv|F%2Q;+Z$ql%Rp4@t+)a zfEmDfk3BlC5|NTh`;;C`+wOO+cefski!XZ^uo85r2ckxCgh&jd5P3QtL3b6 z{8Cj-4=%`2l;RA#zyD+_xi*&HQ@mBoFey$b^xg>9mOUGF4AiSQmL;P5Ae63+)ylYD zE`XcmT60p{Wp=7G$0D~|ofNZRtY{jTlDjBC>bBK(dnm#%JQ4-n(1T3eFH!DOo-O>e zaq$(5nUAB=28eDJrr3o2#fMqRIr0li^ojRkc{LC;Z%82%u#zUp?F*;0_XBv!`xSBF z7~AT>c=j^snAKNU8Y!4j)Z-RI3BxV4I{ub-mQUZYhB#h#%MY4=U%eeX0Q$oHREvE2 zmM3`#CrH(C17_FwgU4Snh@H7H;fMirF1&I}Z9Ufn;`ZGDlK9R&a6WXjkgNO=$7g%P z-dtqJP3hIcvIok?%idt`-i=^@$X=9G_<$D13aH98IJD3Vyz%A}F z=2gk7nT^YnA%(gF@8y;j*pUhAw2!r?&VU1_KtNdYb43rJJ*;X^&GI(TmNq(%$6G{^{AP+k8f_u{F!Poh zLoGlULK_Vg10^Q5D?7dnF?WQkPP18Fq;(K)VedW_X$^uA?A!nyfzcWV0zP{_2&3JffNE;ks~hAZ+xthl?qrOtg;;~HfGtRYVq*<&h!c}ei>S1l+9Wzvbh|bVA0Q|w?+(tB5$ZXhFY~3#Mx19XuUC!-DH%R$Gc=g%m z0cQsAtEbl`2nDrTZb;-(AF?}@Q17BjYI^Y657bA@Z_HwB{G7UhZ>nleni<>@uO#%s z;gU_{FfS{3|2E?kq}|`c?YPvK)CQ-5Mj!+10|+Vi5y0(dEksVEliJO*mnGL~>?R|7%Qq=yxK){`n#c;w9c0pf4!fxI+)^1TRf)l-g2KF$Q9p5Ezw z!O8`-BneC{#nY?zGOsENx>L(P>N_#bD8<3V4Mvg~ULz#0iRlxaNMh3H)o%9gs}a-r z9A$WKkMBQjy%>U(K!t*P9x?Z#BZ~%DNIw zB!z7)Uqx-%05?)L^0`+&RGsX$EGNL+S)OdRg>0szrM%wba~N&RN9E3OWif+&zyhuP zb@uL5nUGKg0owp5A7|&2hwUG=0BBB9dASdH@IHGDS24i8M2b6oFYR(E03?-&XrYxf z%#OjbGRDOqC(*$lLA8?95I-w{-0}sj9yfrty3#s+Rn(TN$YhBp_-^t2IUb%UWy70E zM;OoxoS(Rv`@xb@IJM3AN(Zw9P4Dc$vuT!gz8&p<9IL{6%w(YH8-=Z6@S_Mc!z)5| zI@%Ne3aT~T)YInZ9?W4K6q3!yz9HdM;fxaHhDf+2Obl1@SK9u|NBsT85urAsJ^8uubK9J^5ue)h?~oA-Y#^*rq}mS1)a3#@7SSmjL{_ zuU1R2Adcb6@|uj-6Oo!=UMVyvO1|9|Z8sv~S zd=S(i+_+T2<2>FRKRSSY(V2WHNDrxmkk@Cip`JI9^$*Hn=(_DjF^lDg}kD3oqt*Dg`2*O$o@=Z;BQtC3*{I&zFx3h+_mW8}vN(DYW zc&Py$b&iq^io!phJF6k6FZx-1y-@eluUZ%wANY3{S?i-0q^)`5B60-p{K!*_#d+=5 zM_9Sg#u^)=h|g2r)+FXiUoetI*)F1rA!9xOBrv=E&!%v+@yQM48#>mh)%X>`Jyxs1 z&}TFXQXiEut*>mu@$;SAZnDY`w{js9@L$v2_Ni!A(GY@)Zk{#`spF>}N0r?b12l5g6(mxxKymNLLkhnc11p5rN)#U6lo*~TquJBRhSGzc%P+h zt7xmnAgVyjcZW{TkZF-l29mKK$&3(w4=?i(ubLHg_(UPhrJ~NUa*Z-ntJKZ|_Dh3P z^Rih)u~e5L0q6fXGZcxP=+vDaPV4t;R+k_)%cViYO^;`9g{B?q<%5GYb6FhbXBurV zD%-~OS4gyC;SsQW;;^+o!@o990ZFb}tdJx_0y&ROc=W83O{<&^k(W!jca0v!cvi5= zX!yxKEti0K2q`!>V7pg)4#ZhaU_`J=D9tl?NN=XKA>jdrsakfo_a=$da(2jjXinx# zw28VFVpp%Oq>D5y@xJ0W%QQ#L6idNd2Yy4vc9v3QXYbM1QKK#h&#C|8Cun1Xv0yz4 z6SS!n6(RbHOgZ-~9ADDzWKUpBqtf1jQK-TSu@~(GitwwsYF#fT?!!}Oi`JI0)fxB4 z4-e%Pnsa6*9l(==iKK62>azy2E65s-7Szt#$N7}62)XUu5rg;!wtLM5+uWb2A|7bM z%ZxD=MT6PF0=wu@t=?mJDaT4(In$(auw3b%TbEQu2Y6qD&T^n&;Sttt zL?IdA`3%q0dw%fWl1&}AZQ)P#faQ;Jy&Wo>fIlqCRCJ1i>FFR~>XxsS73^Z)Agl;E z-~PNC(v7%pEJ=st1Muf(mrO&bS$P?^cDXmSH zDhqZVhJ#^^#n3NT0uHRyf0t#Xig#nF12wbcL(az|oZnAdP?Q(yRQ;>Ev&=KUp!8Kb z&ag7TnnnT!96#SO)%*Ig(_4ZsQFuJpZm?u^B696E28F^^0Q3W3g#{QgJJXe+)Fnte zyac;e8mcQmbx zXfM6J2+`NKoc`+80IP{G4}^+2AsWC5HlfUA_;VR&96)>^btgR2c6~(HjCVgkvrO=s zSnEb;*V)RU4Q?0=c!zG|;E=&H@gTr&M|J57iKkg?N}ktBLwf!xBreh3KYsTRUDs1P z93)A6>kC?(+t5M%uHC%Ef{;OUf~_O00YE==4j+kvQ5m2_}pxJJ%9Y<0LN7Pv^KXo)qLAq z9icJw>IWi%KAlOfCq|fvE6xa?R&R2yjq6zx!F$K3x$o)Lv$rWsIP3hMgU><^6J0cG zI`9@&%a+n7he9V$?5G~mMX=Wk=87g+*^m6w5Jr2lm+S=yx$N-qWgNoN{OV7>^|M_t z$@k09oIF;6#Sz=YH$()$^?0tKtUbCm6YDd2mluiYC_a=#xVrPQY;X#f_PT!WqWyat4_5GS+oD57I|h z69B20X&2@3ztouXwHQ)n#Ep0@dX&sFR@t+)qkntt0@hMXbNf5({nHsS>Je)5;e98k z9kxtdnk{?auTuBR`f-$Q>0LX;=jm~y{N2Jq^hB!?(J%YG(ALY%aT__MVF$f#IMSGp zgs8Orv-Am|+;jjc5vT2KHR|-MYb>5zqk$FOk(9TrKu2;z|0KdFU1L&P#!sD#GVai; zr?h+|T4rcByxZ(q$B#T9Y<02-V28!3n$5fhVg?tk6lW`^YhXkW3)*LT`q96cZVuqW zq~Vk4TD)aZY#<(XQ0V@%Cb6EXP#m){QFcfthpf|j#g_toWju{YPZ_8x;SD{MYvCNs zUoHAvc;T6^{@5P_mJ#R;mZzR>YMq$n_5ohceAE-wMjg!|f}n1H<+-uSgAv|EP(pIq z00%5I69XoFk3BB!4UziCxVaUA;i33p)B;M9VF+8rS6EJu1KA*AF8{Ht*N2H@rB%Sz zI3e;8K;BMf?uL1B|3)4c<(gDnd1Fh(jkF?6awqO`ctUrB7G;a;d{@5_UG|V$<_9B* zzECJbh*>;xlqLhex;^UidymDK;Ev}MTaEW)=vSbprCOMfY!$FuqL-w2i=C80Ipw+l zE)O5nKLIm@Q4bM<1tY&&oUG=Q*$CMZCz2ddm?=d)iReST z)quKyTj~2SgJ07!D|B@VcPSxmwX8@9DvXXA!pyvkBeA`~PsihZ!2oG!_QiSnYK!YJ zx|c)?nHGKRS`X*vl$GC-x2m^9JFi3$ID>m04++L7MEKqZxjmWL93)rs=PS!8^by~T zc*9r_o+L&m$Wf>&P}Gy?IgOl5@gaI|#j~SanvJx|gVOHj(U{2Z8ASJ+OhOT#=v-ks zWeBMj8p_6Jr%Fo76w>V+)z=PJJ7es@(F;QQ>1>AgAX=#<)SL<9_P@P z<3+*8p93DMT_Rnb8jq@0@weGTuUsZ)gL}NxA7l-up}(cCl3#)*LigxVvrq9uR11E8 z2o}TMn}rX1ha~TcbqCUq=zIu!L-Bq?MDH=age02-{@JVyeEAm3#=q_xSC6os{|24E z+1i$Bd%r3FQnud_@f4lY1y&4U>|Yw{$$u*}AsM>=RvC@= zO)&eV*&BM<67K&S*74sQ`!U36yU{-4V{6#^{1`tfHVM&hot@@pG6?8Nqw-hhZZw9k z47A?{$*qpF1|o{^Yss1l7tZ4O5W2RD9T(f}w2Al|42W0DH`{CM;~F-oreXiIAgckd;zUE ztUZ(`H%-Kql+w_emv|gA%4W&g?LHRO-;_dE8^NP&KCcTa*i@!Dln}XlL&J{v<~Zz5 z!E?+t(}~^`I!(0|3;QK!q@nO@B?LN$`IGh*!wzrcIUM@yv9nQ&2=tHE!vmv?iX|k2 z>b+n%Egr?I>ZIzfn(EVJtR#PFv{1yMR5Zyoa=AD$lq4+lSD5&6C@oXTkCt#L!C^?%r^<;Er#MgQS6RaMuY&ph$_8*8)`nj)_P+?MsQ-gthx(V`e<0ol8Ce`h+$00-l<4C(j6I({TiZB8SfHnHiY^MIFnqo>m&*}A|36V~y0X!; z?C!5{lgJf;HG{y`M$5}y4EQ4H1JJvcG5js#=$j2ljGfwK3Fy-+H|}#lH@kV4Et-*lTm>TD`>&&x2B;WkpnT-q3#tFb z^YW6ckA$>QQ2n!67Z?c2n&Yl+NqpU4;#J%Cl5Q|o3`v~3f14laT)j(3`w8npAHQ^D zW6rouMGGmxHDK3#?du{zDD}6|{yG5aw+}!sly1mwa0?3(Vp@aobKO2RG`T^r=dLVi zG&vENLOXfzRzzHE#*#*IB)eCr_&;CpH(HO^ghz-T29nER>ku;9pU=%;v7lPI_B6_V z$87@83+zGXjmIfahLn9c7C1gjlF6ok2fxekb;cLK6`{@A-L8UB5Ku2mo|*d*CKKr;#h& zqoWqFl;a~rz=)uweSn8YFEgK>2GWrYIPNZyvs)p|o-}T|Y^TaO7zPMP5kN1Vfgk)5 zR3r!J+eq`KU#1cmy2Dv8{vAJqUH^ld+NgP?2kZ)`v=UiVfGt5XLv$Lhw z@Yjg$&5jMnogntUgkwbGERef>U{%M~`jI4-LH5L3@5i_J@4NJEd=K)Ek(TOP#E-zw zFCxgf{#*9ULJyuf=9{c(maNiA>p#;K$#Qx30MRMBoNGS5pWh=pR`xJyH|*TEu;1hJ zZRuV3qN>8a(pVyvvMhBbm95S$TlTB?mm+U0^8B0FKJm-Q7olACeauH7`>xb2+VhYX zkcS zQ^LLkYujhmeMIq%MBm1K17hg{8xnttxl3;Sx>;8}1ZWJj84{euGUAJ+%pg1OUxQ!dyy>>Xf1()epBBN*?-b zB?wEW=uxhtrCZp9R*ohy`A)KuhmgVvHL^;QsPeOeQuq%n2 zOn6?@JBo09z=~HK^?&B;EdA=gT2H~ayaSy|h;_+^N|&8N;x!6D#}Ma>66|DH#y?*l zzBN$uGZ}uuz^-mqh+f z`Wox*$BT4rrEY)|_lB%M0-;trnso}`W!e$Vkm(^ zsDg1NM)_pi>6;-iLgb6k8EP+qYH_1pwCO||mI`QMs@GZC6AUp8LdnRaGY%ds1hVs} zf35AB`PbTidV?XU)W2(j9gWPF8AeFZHAMt2CAEWhGo7uOZJVdEQ(0_!L=OO(gjLv1ImKS$7O3>gxCBN|Ba@*xrFgAE$QR|9-d~XC} z?q67|Q+&AIxAo}h8zaIX%N^T4A>7XihXKe?&buck5l9ibsho)4`agjGwPKLN_~+mF zZz1rTURx39om0!Wo~!}Z7qoJvP2m3kbPAgX$g64;~X`)&2J5v3RmMfsfdkyf{)4I#-CnYZJlF z`yZHhB%Cozn5}=faqG7Ka@Rf${T1ApMD@=QFZN`I8`s|&BF3BGNTs+d2!0w8qDaNE_PkFoG{ZNbRx)rj0<%@EUbQ^qP^^b3W z{!APlbTeG!8GOE>lXj^=<$3|s)l0_4sGUJEO^i-FXJ}P~M$iyLsyNHBtVI4jRde-; z4GLLu2tw+_SPhHqV$&x;4)LnS9z7ctSp5}8`Cg6j`BI`hO%(&R0{7>Tk~$)Py=^!? zUoD#%1san*B*E-u42!8yE(0&$Z%{|PM>4C_-T>36%i~MwB)1!hI?UzVUx)7z-1XCY zbt+2CJ+SInUzGhTBw_cly)INNOYmt1B}n5(l&hv>%qhve*1%o{I{B45wxlvOy7E7l`Ms~*&*Y@_<`IO8@4qnG%}Z}}9hjAQ zC9R|j3p~0rZx?+PLPkONWB=q>e=uQ(a6+?bhx^dSE2A*yc!F(N5NAF()E3$@j(_5* zaBOTWgvPrA8Xi;RWo~d-o}ORaD*=l8wLmqdlr~-ixcNxlIP|%s%4Kt0*W5-Y1<=pC z?T`KsiBwgMw^Dw*vXt&v>0fXEA7gI;6j#u+jpFX^uE8O=6N0-3cXxMp2=4B|A;F!+ z-2(()AUMHc@gI`+{lD+lty^_#tF~w7>=`*{_ssKj_jJ1uzj@CdA`5z=M+`Im{Rha5 z##HI$<%(;Jw$AOt>}w9@oL+q>Pjh)5=I}0V9?TOU?x3GR7z9L5Ut)ADc|eMeKj8HO|1$DuhPZ?tm#HHdNCF z-3b?XQpDwg&3!<&26l4q7JStz4(+hUAsZ-vTUNdN`JO z#Ar`u!)(@6Z;t$^oPKKtou>=C+)D6Zj1;EP;uyY|yz%=kb%bwcBxlUPT7`NQeehY! zqwa?+!|Px{UO57;SC_^ln9@71#O-H{6<$iBnU*61PMlyXJ0@S9`v~&rSZ9Qazza=n z;Gyj#(Hh+pqA+aHZ>-jV8D zu2z68JmH0ZhY~N^{}7J>3GahQr=pL=KV=B@+=$lcfMo92y^JVk-F)i5 z;XW~POKCKzF8E)=Y!6{3#tk;S7~9SDeGALzC9S?dbF^WK`l;bvee!IVV-!`SJcU{# zE&Sonbm?Q=P+YWB_ZRPYFGzKHt@H!_o4fx1g_(5FDGJkw730ko))`_y`j5pbF~sj} zDxBdJ?}%bxO(_)KiGNo-tpjNeK z#ZRw0{6kNI$N%Ji(3E;uFB21qM$>gZEdvC>-uLi#wP zbz?s{ogXQGU4*-O9&=KU0jtPp$abi~&S)9!to2Qvu@9x6(^ zb1a1AgrrdaJHUqV5A>We519_NA!#Kkq+=O^h;_D0v%(EPKp}iun@8~HppX08Cpi5M zC)C{Z4e(WDNMJ*;#GY38{Nn#`(Ga2L)X6W3w`5>$Wn8 z*3bU2Ce$%RkED`=jn9JITP=Nw1xRFZ8Fis1k<0Hugs|+wHgg-hQ-F5YzRHH|;3MNh z{zUPddO*`{0B0AXhk0~pF9dYxYrs~7!VGC}g?~Eb`)TNOpR0=HW&|bYdwWO5=tvs? zbq&HwA!v6y6Ob}xlxA!z1#Zy_*`c^0M2YP~hmVCC_*+UrR9Z8GBi)YUsox(Y`{-6^ zae+0S1HRpfacfFk4fl}LstyHjSs0IJL;(jCOfS~$QfZV0!(HlF66^Nyj1Mlz^! zx6`;8MrASDOvcMKk4v&CSC*ySD4li62A(*EilBPlnt1mZOjS}≤I!-q&_SSksMe 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 F{{!g1K$8Ff literal 0 HcmV?d00001 diff --git a/Tests/images/invalid_header_length.jp2 b/Tests/images/invalid_header_length.jp2 new file mode 100644 index 0000000000000000000000000000000000000000..c0c14f42160abb77dab5dd062810de30a85ad1f3 GIT binary patch literal 134081 zcmZ6x1CVA-&?Wq|Z5z|JZQC}c?e1yYwr$()Y1_7K8~?of{kyTT6_t@yl~GaWqO#77 za{&MVtfc}WAslolGynj=HT~mmZ)wj&_^%E4&s*BN8U3^W`ZkV^CJw+qKd-j{FaVGr z001W72Y@9M03ah00%#!-0iaxPz?jfyf@qB{(&K{D@D8A$;$t+EbNQnF?Vuc;DrOGc zprBo%rGK^*TA6f9?Ou zf7kS%{r?370to1T>W>lt_8(YqATSUR0ML&P07XDRLPFvHu0L^r|DFv1Bp(3&lej~= zh!o&_mE|=Qv3&Z(^P4O=D?4a1w}IIKb$_eY(;|FPtJCFCFD6M|DDu>JVj85}80}I3 zH|z1kRR~P%IE#r^L!>>pJ!@d4XOt+d7n2F}F>LvQ@0{V`{hhe4Ahej<90;L?;7ocr zD%ULF0Pt}~ca8qsuJWy27AXYWO@fzQMbApYvL1GJcS)l+tF?&EJZWuc7mqG4*4H2) zK@BUT)Zgmd(>uE#m8|C~Y{W?D52gF2gmAM}UACy;go+sFB`$_My{=eNN_W$*3Hgh+ zjuboCSEf8N(bP{#$TFI3D4U`&V#sjB>vpNYDF54=BvPmy_Xtm!gc83uy7Ha|cL%=1 zOy$QI!fT$tcTE9_rw|M44L;!Fl#To4BX@vJq|d+TZ`9>vFVfAFg^GF|)7^*qhMxN9 z=uR&vGKnghfSObQG0qDj|2`Ff9 z+4mL`!mqDV(Wh0l$;VzF%&)S(snzz+B|yM;r?>BNzi$AL zK+wSo@nfswIh2jfPIl$vzsv>TP7QFa1Qe&&J?udH2AG|jGfbsYzQ7YXsJiz5`i#wY z(GZyM^=DRV)VG5TMc1*$@JM=6eiFjmm<;|=vVr+96yaxrfLg3P>SW)S}z)FOVW)E1&gvcY-S#HxU*|7 zpX#sfpDT+k-OwRQo;X=MyCLJ)oJfA9))-h2bYhwao8sdCQ>Cx~xPm`L`7OCicj?ue z?6(Iw5g(y7@fsrbIdX`Ev!>}bEY<5K5bLucW>>w%zaV!ONNp!D{8l3B zx>xkWbK{U4t$;3TVSI9$K6t5B0RMb~d|;M^wxD1|-|b!G%jGJfcoX}t-t=T0v6!(B z@v|~o-8o2~W@!MQF3(~DYn(ciA3Bx+dJ;O4ff1exS>Y8j2FF}wJ~U@NPavsy0R_6PQQvQ?@TwzuWmZqgi*L!P}{^D zjD9Q+4gwufn0XTm(?vs_wjW&8Z#hacwr6QiR+HNE!K( zUUYfZXla+uba^>-h6)(4t*(lQGr}gGa=}N(P;~)u!P9Vjb)d*&Ok>L=QJYCnbEQJO3p5SFXo!5< zD;w>eK77}O>Ft;LvUn-73x)&=Dgy!AJJW~AGjlEIyN6c;BtpwNJcNajbtG1dr*%yK z)=a2$E_@(Q9>$k5rQJ34zN%us2(P@p5cNB20dua?dqZt62sq6XP#B5gTAYWgdZw5- zB&kq;2KZ>xx=6#im1R^_bfb%P69|?>`9?M}UZ=$&r&N&mDI$3jSm%@p;xzu!R2}+K z`N_xu8kz6eJOYZeUjR{=3USfr*QEOLx8*{RIK3zb2t{EXa%c|G&Z)MOj|2)D8tKf& z_qXzSQ!5eFBrAm>)#u`mSvj9am^0}_?X>`em+Ta<&)5MHj1!4PVJhal&Dp0A=)A91 zO)#NCNzBdIl(HiQ7u#&ZO|D@Ha7YC(d6fl?May3@Y<5vqlp~&Rak4)~OqwO{l1QFA z6EH|+L3NHMY6zUvcq;9-6YVcqb9_w$3vF7Uard;P8!3i)p42VCFm|hnGKMl?(y=z;ZJ2?^-K&0Ghk000%s}x z&%4#D0TIFjd_zOA_4By>wI4F&OdQ!qE{)QXmX&~9Z|(@E{!ZvIREVcmQSnYBT%{IA zon725Xq;`3?|sMwf5Kck=h2$K&e8QCUq-upa21c5FS)y84;$VqbeFGSA*YrI-EgJ{ z!5YMF6wxL~sejq(dgQDfTu0`C5Sxq$OW#%(D}3LpRJ4CrWgq0W5b8ewdap)w;0D{*)XCPyyMa@ZI`BHpG>~PqHAD@}En8jI=%jc-0Ak!>9dW zP$69T+t!uJAb%rcOqq^Wf0{1diZsvrXm4nO>CI$5-?xCao&zs52VZs)@TRW#4o-HP9$NPFw?$bQB0S6=d)g9wOZC}=(1WO97D>U{pJ z>BL|w<)%K?IVxztw7CNR$UNP3&AFrs@fEND}N)2r3HjzJ+<&i{@ii zOY8k|K8*!kUgj{DB{elw>Gub9KlC(l52;;aJ=0Etb$xvfSim9Q0N8@@r5^c2eG=;6 zR>6LiYRxKG@hr>JdrNVmwOWo*QBn-qHXtoj{|Q!l6!@#VdI(c^!VKZK=M3bSH3DJ) zWz22+IZlu*{%Em__ilNa+?zGZju;ppDc*H7KjuJj{IWC#pIoiP9ByL53^W9AdhD)( z;y+Q;)+c|6AXI=Fq{VC*T1Y|53)E#qx|iP~edDKNYrRw?EDJfC07pa`)1Ixif>q*N z7Abf`dbRvg48ax+p6Sx}@Z@$+HZ|+8=g1lrW8xy>_p1b*9{j7_NV1+oMZ61IZKwea zVQE}WuCI-=T4w%wcnAYO`%UqSr#rm)PYUfuSlr2iS{kt#Vq*MvF8`T-9#WeKoDLG2 zBrd@wbj{A02(k@peD9W~7SE8nI|9Yd=FR1FtqgOu#-^8`I|?Xq4xTe-@eUkAlm&SH zZMf=I4;<2};H|h`h9yA>AqoXXE0Y~c&<12$Qa;j&F_nm6C_^o0U+8x!{+32G*fu(h z+i~=LES0?C2F3LJlyUhgpP&&k)g8B0rrb?4|4Q{^)vpZ!xHwc=Q$M$pAp36x@>$vw=FDEEJ_+j$ zq5)ldqkW?%)X7avKV?j~>nExabgAJkXj_r!#6QutnvFhe^8oEowkzp|=BN|Rni5tB z2McT!E>^>r6Vf%4J1&b*6>N48z9vXf7STI7;X?)3{q6)czfr~S{CBT}$ywo{wZs59 zkXS8s>y)$f60Rt$LUf!9buxqHtc0)B8^TalA6bgTot5V?;HR3qh~&kWI~HYiAB8U~ z>I;wkxkGrF*Q(o_S;O6-i@US^l7U9dRp8Lb!M7a}!~I!QyG4SjdVh*u_4`@%nSAi| zTHY20?<>7SdPQi|?-RH%?4dg`{zC)$l2*~k999^K~XC3r3+~`{~@}i@Jp`us}W^`?WY>--}8~}XT1ozJ-Yj?2Q~V)3u3N2SGxbU`u5KV z=cZ}|!Q}9;qElKveNW3X|2G^9tVnG`j|nwSq>OaR%%=7pd90hEbeZW{P0{JVBRX?s zCDvajcRXpYfKj*t(C!ArEWypN(O+$9psu~%MLsX-X4UDrU{$p)g~L!hcssRa^B=Pg z?O?F5&|LDabVL7#js0&fh7$q&kBgl&_mt->dDJaM#?s);KVj}|P8wU;Rl=6(VDSvM z>J&Im@d`nPxQbG(4dnxm(VbmYqR^v|^m?^S*7AkzmX2h3dKu20e|7S29i2}>B7Ybr z(gcoFs&XUecdsOKUAu;sA|_#kasHAPP3QShN$0#@QlZi*BTC*eo@t(^R4^7&POU*W zK%|U3X?51~w4RX%pgrHGG}EKGbNCeW$6A}RLLz+(d`ek}9Njp};LbeL@FJVisYdgO zA}#VbmP5~sJ|kmN3BKduw{uCL7YZKCr|oSfy{{0SX!8q%Hfa}M)E^FRkI-{AWPx4- z`cmR`S23_}(PY+8 zZki_i069u)f#xYF(X`oa9ns>3NRL^JvGFE#mqLn|(>!?1Y7t;TQp|{MG?4r6 z{AKlg&{#h|fF4%)yzSmDSHJL>d$i)#Tx-^_i^gO552<4gECCS%saPhaixh}iBU{H? zH-c)l7?Y5X*p>`jf8Z*W$+tzOv-UvOs=)a3o6_6kt++RN6&L}`Fyt9%n4j*(mjzeSWHf3*fYZD+M} zO3rs9=&LYFFcGI6^E#&m9iU5@-<=25{sm2TTd!HgpBdp55kX9(0O**F#&)1^5aN4& z64rQ1lbj7vd(u2xKjiTLAWF1^F?_*yp@(ed8xXZWNq@~pJ`$gRC=!+2Jjdencyog_ z2L0eHLGf@JhO4uERFo_`e(b>+S$n3p`Kjf~^2-{ej-CkGN$VV!M#H4IxGhRQ1 zSkLLrp4fAcAhOpp1_CI0u&#S_hfiaS@uJ;-x>X#(FFbLLb;yB0lFY@uwIkL`w7uD4hqPu^0;O; zGC5!81?L)s#~~Xs2V92OHs@^P3>K&p?E?4VfiOz}HW!~J+IXUZKXTGOFXrm??PU@s zz+A5}M+uU?;vIeMg!QQ`6zEM@NAwUykk@vY;2&hY)cP+SfaE{z=Gw{C^&KSe-s>4aKx9ZQ;uk?bT_BXj6;#lx9o)%RyyoBLgx|!g@v;P+X5D5p6W6; zr#yCDq$mXq+H{-~kw`6^H(ZC?FXt-9TgC>aVdsLJ!NZR;VeECpbMCHvk&o*>JsFex z_E~LEt)Eb`&O=dPo#h6h{{-66!V6syNKSRL5lP>+w-tpCe5a#8ae8$UjZIu~0mUtT z{#t5^^Nw#mBwx_=uiP@a7;)syl?u2*-AS!?R}vZ-?0DudT!m{GCVY3p0`e-5$;+>U zetnQd8S5xA-K2#^EZPdfnc(!n3+Z`G)I%T?HTJmiH}v{T|R*wKZ;x{<44r z^VzXB)MO2(AMx!=o<7-(Eq3~}v^6Y-b5OAsrJ^iL`VPiqQgxT8G5f>z3#qi5T_9U+ zq0SNrv*VXmP0jGSs&gHv072shIREp$A=x=DIAp(ASGid;k~tA4X)__+tQ}OIKgkJS z7~b#7k_C6+GjoVN$~^h>)$Ok(l@n7=>6(j3bZ@8B3#o*)*_MGZN!`_%`3Uqga41&t zsp$T6Z`w>)E$X%r?2YqDPd!F;G6wW>f>EDaxZ}l!Kms4|a~L#T_@Y;y%eEpcwXN3X z`frNpDY#JgC3sFtL_C$d>Hb1h=zC@10+`gyB$nA2!r@B3wBXx_R$?+OdS&vuAA6%> zlZ9Hk=F|flKex+reQ2v!Qy9>+x z2jLnz2-U;%-nGvU+WYd)_Z@FE`P`!VJ7z`pic)&p$UuDj!p;P)e6R&fmYtn7M^iQY z+i4cQAVj~7jMh5hWFXXqt}aDaUaAVIHHO!~y*^@UZ~y&NIsYQ<26kdY1ooUoylJ`X6U5omHqgyakpMXBUDW&G1(6~a@BM3oHFu5 zhoA@iOO}R(e#fPSa&71ujxj&O^LEHE^VskFHqD?vIwX#(hkzv@({|(=KpBemUd#yIzg#dtQ$OaAe-_3ZvIcwgD}acZ=6}xB?=M2*IWl`f4XHEbjD> zu^tBp%*&fl>|(usZUR50p#9lQ(KYiZ>r6UP>cgxO{@tu=l&iniT^{$$Gh34Niz4qY zn@)jXO0%?WhW8i2x4|*D=D+ncn?={~g&(iXt>FJOoANxbW#Q)2A{TR z&~9)3&}Q{yJl6%&Fux<$?t8Ugg>k*!RmU~SB*~ldMz`T1zlhNs4{Qm3MN75CuZi8g z-({K_75`-$1<{yyx9V^$5w()x&ij`^Lc=$Mso6AiO~eW1JG2eN3scRqSn}3N?0r9g zCMI9PK9j@R-qVs{H>hZ$>Ev=0Iq)&LRMU3Ta0f~hbzFphvm?|@6W z+`m*g843w|U=d~tRadgPm|5bFwjl$OVvV_4a{e04hfMS0Cj6*AyxiP^XW`JZZF`dZ zw*#(VYUlHdwVK(_WcZESKYsEpJuRiRPU&^1Y$SL3RpcqxtE1?wLd5e*d)WIs`9PG) zE2AkvA`D>e7L+aS`AXeRw8qnn$yf4w>C8^$>&6nS z3X#yYil)S&Mj#)^h+X50&UDOvUmZfw0Rs4zHJB-mJn)B+Pke?k)SA_I<(< zEEOTWr1W~Pvk$U5fl}Sa6FcvC-q89}_VtN^_9G%9jrT62t=yWBKx0Yirg$Z+dwWXC zf2(8M9qtXMpve<|Io$j(bl@EnYjA)|1i2I_F5V8+cyNOlH~yH3*T8>Km&R={^8|OV z2-yIyyEXiP;3wLL%i1D^utYm#Kx?3FiZkk-1Ur5YQ9ds@Jv^G*Rf?j}IwJSD)X6*Y zEY-!m>$f>aqQHLWG2iMeE5iIso>gictq?3H2FLP7)`3m(iDpGf97^!6^NR3Zpq)H! zQSAJ1a~l}!CpR-D{#kG}R>^|}s%W_;2Ie#Oux+MUOgn$=@^#_~^{R2f%t#Is>*8#u z1-~|cDm#%CB}%4;#Kb=q{w9v((}R=>2CcCnz@2`~(!q+Wi+VK$(e z_fyLxoQNb0zico}VUBhE=nS)_;~d;8Z^hlg)}uAIwd)>uV$j|;xc&t4y~nY=7dsj5 zGAeOqSVJe=IsLI9*^Kj)vD88wvxg^(JHx)u{+%6-@Y_$l1ml932?x?zyR-8feI@n! zT=a4mhn`$g0#Ez%gY$iv&)c;pg3PB|JeJ~D(EI`9#t%A79alP$Nekc3xyNRTJ%(S; zcoSoJ);<`pRNV*+1xZ6-!g0k>%A%{r%3=>uw`P!r2<%xk)H#-q_(MfrS}%FU&B8v% zX6O7^_r`VP$KdCF*?d>Av!#9V+wlNjMu;y`G4ZY^qUYq>55E28AvADqcygAlgx*6z zGh_K>N|`#S*R<)^1_kQuBH9YFkr6uVf#G}xw~S$k&6TFGP-EuyrV0d|6EcG+i@g-#DN1uFjF&Zv!TlqPa zLX#?wcr3&wym}-dIjHWP4BAqbi{%88K88 ztKZpcI$v!b_33ZEs|YriFqO%sl<_rHxaLQ@>*qOn$3Ys+C=#zFvscV?9m(Y1k{5Sc zbyy(ZDi4PgraooLD0BPMz{auw)2ZCn(Xu6pSUQ3PL2A)k9&0+>UiM0#Z93!jnb+n2*}5AbTOjuPOL zpm$atbc=}uABEt}Cck7vN7a!J3F9fu9$^{bwz%7xe5Af#H5dLiAZ(MUA){?scl#33h^xKk<@w@UE&;Ig+5*p|vPkc{?#o!ArTaG9 zFq!2OO3=7cuv{J}liD@uCO`}Vc?`rkkR$}qWK+wl1h!SG~j*%>WcjgjuAb;Zke z+nV@urqz|Gl)MH8x6dw}`Kjn4$`I;g=3KorVDOdHc}vc~XUY(na(U6Fo}@c!b__`- zCMq|WjaZJ|d(+2cBsL<7!nU`Oy#)f0%{E20fDpQg_20{bi!(e`1HWZ)sBMm?CedXs z&wyXSf|t*bI(Lwa)6EQOan|$aZR_*qK=I|hXo{FymS((g34lBmH(OVE%x>Act=;;U zFe}P~w+BO&B$$Fd5~VSzRHi)j1$^C9O_njbY#$JUpi1*lY{_P5J?idvwhixC`wLeQ z?Xo3`DhCkD2?Fhu?@8*t?X)u)mDR0<*g|1m&$}hk0QWHP1(dWvn^z+^8**@qjA!S` z*d}v%LRT#5Qy?;qQP8sIi0rn0_%Vq9e|%p7qg^t4Z|fq%)mbEi*g%%gTAZ$2YpT%N zdn>m<&X4YFPG-?@L3ms^#W#z?ZM`?ML?5X*>A53i9TJ_bd+s)|N4%6q8R2xSDC`E8 zbW_g9`d^gm;q$fBAP)%LQ-Ri=nUw*wH4r*FnP!d!2^;rk_jt%X_|2j$oPYn|kRDhR zj0N}N44kz>U8h~CPCkkYbARXIIejPCMC;}yLsJJAlrlulb!owN*P-{(Y(Cp)MpjMO zm__NBthR4ufrq(wdu8obyL%W<>RB2y#nTyqXrvQjIvg~sPp+1Rd;s@5O87x;@j%;J zCK!s8h~N#b%MhfCj}cjpq73tWLy8Nx-uHEf2$dx~V9evjW0;8NHu|-di;S!EpK~Sf z3KKVCai3BEZ%PB1gLA=ty@TFw>t)t_;2Anm3(2yoaGIC6NtuA{snStg-3$6=C$ZrS z$q(epI9hkYrVcN`l`r6m5HYMJscA!BUcM|aNbtCK{fWTeqN$&` zmyZ0l_~cMsmkY$C#-7--d-j`}U1jk4U5a2k%VDP1d5DRy`u^qUVNIDOf_708tGJ6G zD8dYwgG4Q>iJphBlNbsL_?JBWU{%q8_pjoATPf*K$$AwdZecXW!=81Yku7mOPC-=$ z3YRE=UkTp~)*j=#q^|K=+4wDw4e5q%x46~#JpYNjVfx;okC1}$YJb&=A>@8*yq)!$ zc(C(dx>FLsPHcI{9;Od+E}wPDT($EUbJqNfa&JaF7tQSlN;^s_4*}+e zV}jScE?ROP&=#r>+Cs;4a-*}Nw`-RUTBIT^Xi%OeLdrsWKKkP?NWw1RblB7%M1)iW z330?3K0-+xQ|x8r0COjN+0x1?DcRzlG{J?oZ^`H&_M?HX^HkkrgNorA+@0f+8lM_z%}4npkv&ARxzHN$x!>hedbK4l;)J0XKa zd_p&7i#w7VwF=VK(x(4K2x5~zNrz2l`%9>|HTKW|y8dF484!Wf!RHJ&*f}7gK9z zI+NM=11y{F7dBAinIVNf8Bcklb@p`({9%io1oW|}8nj~1$vED7b-%AL75HcXYm4v@ zaHSGXSZApKk$M%^a!pKWLiwkSXSgj8M8zP8r5&t5{aeJtZT0x1qWjVl+;wo#-B?L? zmJVGtjT>a^wuL7?srSV3l}F|KrNIT`jDv&fcED^ZNo=y(i6{xBZ834|+F{Xzj}M{9 z!){I!nsGfg>H|mt^i&1%>OQlJ4=PojbT^koncdynO?S9rqrZ7wm5qK`*d2p+jU&0j z45}qJ$nRM_y($fv+@rR<=HCQO^C7eAe{4L%I(df0Cz3Q)AFwkp4UB;lQAmxIRj*5d z{P#T7bhb(hb6lb)@^nkhvKbaC66c5*9`2|VdrR`~bQG6C=(lvY&)_?NKZo-dKY(00 z9f-hW#-SWuMTq-kH0BtB>#VN+{e)!CP&XMQ*aHp)&M70P*l~-U(sBq%2i5_UFUs0P z$~T#BQS@c64=c!3O#cf)fk6w7J@V5+RU@}li|q+|R?$qk=Xyt>^gQs*#};x~wM0re3Eo5ssq}nAjB_xa zKAV*pkX5qq+C@FJLolXU6Yz*QSv2oXz zT5bgG7F(loT83syvKg3K0S}R5lb`(Buejf-x9|f+u#HkVAidaO_=FVQOJ;3Hxo})w ziC+hm6M9A<4@tLax#Q-MMtgXkBSV5EOumS=lV4mvLsevFh;SdJrsuRiYt%v4C{?oKTlMCk>9DAxi+lv_Me03s$#pa!4G8SlJPjHj5zk`zd!zJ6=#vuYEC1 zI6&b)W=Y_rleTzcbFy!f1@jYu==D+iTl6f3_Md0{SAT7gBBk&$wYmTJO3rP9f{hg* zni`4N7;N=RX-+rV*Of$Q*L=;+ zxEBuG4GcTR&NN_Vb-Qp(y~X6-WmU0&70gKI>F-~!gfRjk#OlZ3fM|*6zxg9N7@tI} zCzB}Q)}%%GDP?RKTxbj=k+4;-Ob%R><_ljJNOvA$Sj^x*msi>h0D4BsvH4(Ij0_Cri54{he zewnH!qdzBgv+p<^8J#EI!UpLqoYoHMy=aD|lqf0>S?R1ERpcRY+?Quqkkj*2x(f_Y z7^8~_?mygGJ-?m{D7@&1-#*uqo-o9ijs3^}+(^IW4}*Gq`NmciT9E1kwW6~ia%zoy zB|WS5CnU*C5wyp$?w)WVSb3;EcDyBrhz-B@4vOfDVYi)zT(G{h3R>o?_*rrd)(-9C z-ynV?gf^d{68Tq+S}zUTbUf8TGo$ozDnOaBH?i6R!*r50aI|wxQKhd`d6Fy%F*jZZ z@#9(9&+56^aU<;>=#*DYL;S#I_-cwBLM{Zw9|C>cv0iceEnCliTX)6 zEzd_ZnL`f!VqM#>^a`!T_woq&nDd&?VOG42~%fOA~>w3QhFsrvvkbIz6-1rEbC$BgfJzy9I)`A{gzb5j`fi` zp;&DaeU(q>8l))rbA7=mcAV^_1{yp&1>+4EUtb831&FvWenawncnQ)2kmn_uwnR14 zsWT3}(Px&vr1NdRT}w@O}{?kUq?*);>!b1rNT! z^(g0}SmlH$0EBje-=iw|V@*+D)*D$wU=`YfpGKZIy(XLGC@fI-msFwT?7>-ADB~+R zOz(5R{m%L%TqH!rRycE>Z^z|3vPlfNm&f2SRW{jdKWMo7>i$QJ``=0&KPJdOCC=|` zeODGWe?SIr(y7&9oOk-qP1nP1SNg00#@V_bF(%aMbm5fr?`bfX%E?M=2ZA}S2d_@9 zw?8ZI)V_tf`fTw%TH@>zb@ZviKgu3oI8<+cp6(YpcF=lW%Qo()K3lPFEq_FUT$Z`E zesH#obA*_(%PsZb6q~`lOE?q4nwv6+qmPsxB-e*sQkV%U)h#Et?e|I56ENr=UUq_) zpUP^k^N~X-hbyNM?}5?4yFjF60^S*CbIrC5AH8_b3x%2x#`x88EUhp&4#i550P+@r zwS7*1tYVN*x-W0v?LQgThp$5G%%REDG!)aV9N}RJkFHpitr<}<_?S2%kdsoeu9*Sf z_oqF~XAtlca~AU9`{vy9@`M&}r^oo{u@&_{@}N@)zx-dUQNG??XNi#Bsf&rMAx@`o z%kB$+Np3|G`SNL0U&u5-t`=wVfRmYqhYBtuaHb43b~b@FIZE@TYkG&>__ui$22|(% z(BDMTBOU;m0ex*T!Jk=UF8^Y@4-yUPBnrK-Z)8N$w(6V$!|W@+a^|PbXPADbMNMjk zeIh3CI#YstkAt!@t|dS%y*TzZRcMM4zcYt`DPetHYnLQG^wq7C)%6Vs4$y(1@pzCA zuTw0;J9|@RupdR&R#V=r@QfAm4V)3V`52pCx@CG)StT@c!4~;9^}p5^4NkQ+>)T^>OnuZyd4C{);8wd4DBYGU?1oqDHd- zj_kSw6)t!um$_|A$Wi_Fw^k*~3cE%!U??<2bTFu(4rj}>POzqyJE=4~5DLsct<&b^ z8VwW4_|mgKAK}#IIPR5S-X9#os`F6>Si7-9S=G{udv4Rf)PK8g45I3lB`y(2UgIdB zUCWWlH5Kc_ziG0=K}<6UQy@k+>+1~`W;nKi4`@$lHNw8-5K{@DH@%j;@Iz)=QS2c} zI0_Bs32xmd9rGuKO5cWlw{t~xhhR6546Bs#`5|&zJ`OY7iTc9H_=ZJL=s6&aKA>`h z^C;?{Ja4CE_;nz;1=4eI(+J?mw*{Oi1&fK_T<(Mqp6u}%nhx+cxb*F2$J>ek6~CkX zzz<-1%zZn#9s)GVZ8$06E=-5v$~4ShA3@mh8h3Ii!Q{#Vp0yB={wNprVy=M}bIB|q z@&QA9R$UBYYmR;x)G4ffB?!EhEhD-+6U)kQ@AP64?L?eMq$T31tj~a(+F)RW)}V*3 z6$P_88jK;2vL}(z|8=2c4gYdQA<3bgd*f7#TRV^jyW_*_Td*$hV3k&lWw`3$__K-( zdv!p^JCSjDOe~BPCB?-dODtV$2NI$o(icqbD~2|&?Nt)R0Q8`wxYp$N7gj2Hi&w;) zB(!EEafqsU<40<2efNM45Q z5BS+-`UC7zq~a7*=U|3Ic`3Wc_m6SkAR|dwvbrwdx23Q@#mve2Y{3X2&y6g!KTh$1 zr`@<6IuT%C50)i8>8WU)j21OIx|IOCnA%eIp>BWVHn4@Iky0+7-&wI@SjC499Jp?m z!}CZC9?h(F0Io@|g<4ePo4fS;1^o@M!%B4tU_orT@u^ zl7rlmjBY0ujQy3N(eCvC3~RVLdC`~wNsPGAqC+T4H_({dn)^02IfumUg6>aBCVa>@ zY0}PKJA52M`ZAo=Z`cV2Dlo2NccnE~c!+7d3q3VC;XQm}H>w)Fz%Gd|+^Jj_V2X%3 zOThc8$`7(_fhn2~jSB+zmyy7&|9l>%TjCH9k;x;l7mT8j?R;xG7lI=~aK|7kM?=r) zhBeiP6&vbe)h!#`G1ZCJON%mD?sCC`jNz^1#FK&TZ|#8=&kw*BN|*}WPzIG>G=(x`baD z-ow1EsfmsPYG=O2X=gVA!8KetM<{0cWuTor26l>;R1%J?ylFe_hnXpkGIn{KbjjZw zdUx?w-qsE|>o+jeVLA9n>eA2WM~cr7E}nhI7Li;6_tP0zaypNt6!fDpPP9+A)$4LN{v(qg>90AF{_yk_^p70cN&`0Np7sC%s~+}3`cesaD%I~s~T2k<+R6<) zAKSIlkPf}Lg7i4`L^Y(I*dn&p5?^tZjN~loDWjNWOU9|Bdv6Qa?&As^+1Ywy`=s1$ zwM-2O5G3+gYig#oo_RTrQ+W-+wDF!&hY=Q7u6TM*;#Vs?q4QqSFs|WIR^`{osg}vK zFdA!8mDf}9zI(%NQs>#ZYW+3J4obq1LA8omw|6^b52wEw*8rS0!UVI`>Hc~9yT-@j zb67cJ8;WEvU}AcV-_bS?Ev`p}KG6j4toldpGpF-Ag$}+2f$!z9a}Bl0xy<_&KGCAF z3O!o7_ZvPU{~i4Q=#ZRFnGY1MwyVs_iMG#(nk3|ye*vZAx{baMiAA59>BCEMA?@Jz zE}8P;I#xyazGZq4^@8^ll0qJ-5>W{ z&KHXrU2#E=9B3Y>`%}hLO&v}49Bvi7cQvu`EEteEw7X_6L_oYFyViPHC<_bp+adv# z_U5`*q=_*Od{}Q<*|j+f5?fx$ci^4Gzriw-e6Qo_lsGDypR8$|kYRX7JD2s3j}y)5 zm3DoP0~yv|_PiZ+NG#AF%Vt?Q1JWEg|5Dpsp}+{bd~FaBfqH2#j7rrd?=sP?f8r4E zX`H<$gh8|0IOpFm=I0NVc8a9;Ru;a*WTSh{v*Bg+uyAlELZm+aKQzRc&<~!Osb=}h z+!0p9?0Fe{vY;xSu!Vr5-D(H4Ttte`tD$Zf1(nsltQ(^llNhk|7d8)$8l5|Dgw?!rb=uh-&{nK)p7BeJnBvdF^Lr^u=|(x9+O5HQjq^X4NL`JStm8 zACca0boH<^<02EM4q`+NrWXeNk9|d}DS{{LQbdmP;?=jSjjh*zX%?ZVNGJmc421Y9RrqX2u zcqOJIuT#LCzo^H$XQL3Z$=sMVhlONI`g^)o_AAzpWp)mdDHK=gB|{@aMoqvsiicaR z*9Zu(P7<-Qn=Ai{S7M!F6_wz) zgXBhIobRFrH+5gGcQ$mc^FFa+w}fX!!xNeilojDn4xZ?ofhl@kLEuzYu$s(!xQSfW z8LWXr9o8p~Zn7vz9xcPl#jZF9F;mlrmp$0uzg0l9gUhvCh}YrMFe8f3ZnzYBL0PW@mXNAekih8jkfqS|Qf zXZWFl7NLVZ_1|Ti9GhpRy}nEfNO+0^v6X(gE7O*lO|U2xb+|`F%j%F2C%9G0a$=#Ow{*t&I7~<%?;>J6|BTE@EK;-^AG65WnI)0#Hssf!$Cv@@hn zu4Oa{m-)56s%H+fJEu!Ca&FKSDloGP5^t&KaT`!r#Cb1#H|) zeQO9s2u`m2@uy1!Hm9tLXRLRlKf&N7FRQu3`0D(+__L!aEFtwy7iFQWh}zKhua|eb zGraVUp43D{r{D?O-C(tSu?Ge@3Co%u5o?lWdQWwtP>Mg;(}@J0_8rF`Fo?2+1%vrkX--V}<%36{|Xuie4cX2$uU}$7yAUnP@HWuq#W>X9;H)j-)fLcVU>dE{+U9dn`el^kQl* z0CgnW0N6$MV>pADVT)5fx|TYM;yjO^v&5OG(g^m6@eq;7uj70%g8AB5+2*^zf}<~u z1o_%XreuPddASWr9NCRNqZYH=Hp&Wvfd>gXedp7j;<~gzk#vAwe)r zklFcA|M<<~%P8p0`%3VFU9Ut+Q@r+UO=A&+Kh-0`J`Ezg{$(oNj@SMGiJ%^*;JA;u zy>MT`fi#q)8`XW-?Apwm@!*xkLxt;HR(mTx8uJdfCP%(U%p{BPXz1jnM3;2pQzLMy zg2hn?O3w=#cr_WKlFvj8Lmv$c-d=%tj;mxRA0N&{|KC9S@M-Y=rRYcu?>pTYFVdY= zrjcx21>@irY8?`RnXH|%ApJW3?!q>T@96M{I^WrjH|LpuZ(@Ea`$Q?f*zgZU=c6V6 zTphpAw_VEEJN?_MRF5|9YxPc0U8p)x2zTPeA*US{5+wI05AohHIdA5NLI9dysQE@vm8hogu)Kf0Vfz5&;uyI3VM#&yEd9RAgoOspv2N=nb? zsBRiFQhfrzFiE{qDg4$g+4ir3G%2eyzb;M)bN7L6Qyo9C8@&R%e23;Pj2)}uHc7{2 zjkk%r_e=A;smX{!=^tvKrm40@-)$k$LnvAy&Df+;SB!M_Tyr6M;n4?>|YRmW--?5gEsBOOiwmWu_USKorw z=(ts6_>(mr+ML%uwN=S%HHSWwalc8d@gkW66D9G)YlNuJu8PutzXcP-(2=FR-a9AN zNbU>*63^ac1Z`jlx1aM#<)vN`C}0tg^Ar0`21L5kYY8xj<|pFCD1+!Vnd5ZNO)FrI zwVpdPsOLjt@&4^-xH5>X^%9Zfb${^_7ZUXlcfxwTVry+l>8}*QF@E4+xU!|3JIMu7 zew-i7ygrI=8$5`FovSQ(gmCuQ1_B0hU!fF6fQigU9~0h-CHNM7*l-DB7>NQ$driqJ zBRV%tvsI$eHi}X?X~+z9vi5<~9MIe6_Hgnrl-!^k@f*)5qOTxQE>?@HK4U7cgCC|bLOO

GFpb@-RI8MV9rh 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�KWjh2zH{ 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≤I!-q&_SSksMe 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 F{{xPzK%xKu literal 0 HcmV?d00001 diff --git a/Tests/images/not_enough_data.jp2 b/Tests/images/not_enough_data.jp2 new file mode 100644 index 0000000000000000000000000000000000000000..2d28bb5e96ba0f688a003166657fd98f24bdb846 GIT binary patch literal 134081 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

GFpb@-RI8MV9rh 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�KWjh2zH{ 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≤I!-q&_SSksMe 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 F{{!g5K$8Ff literal 0 HcmV?d00001 diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py index 779d246e930..2abb2bcfbe0 100644 --- a/Tests/test_file_jpeg2k.py +++ b/Tests/test_file_jpeg2k.py @@ -4,7 +4,7 @@ import pytest -from PIL import Image, ImageFile, Jpeg2KImagePlugin, features +from PIL import Image, ImageFile, Jpeg2KImagePlugin, UnidentifiedImageError, features from .helper import ( assert_image_equal, @@ -159,6 +159,20 @@ def test_load_dpi(): assert "dpi" not in im.info +def test_header_errors(): + for path in ( + "Tests/images/invalid_header_length.jp2", + "Tests/images/not_enough_data.jp2", + ): + with pytest.raises(UnidentifiedImageError): + with Image.open(path): + pass + + with pytest.raises(OSError): + with Image.open("Tests/images/expected_to_read.jp2"): + pass + + def test_layers_type(tmp_path): outfile = str(tmp_path / "temp_layers.jp2") for quality_layers in [[100, 50, 10], (100, 50, 10), None]: From 8ab06b4daccedd23880f5ffa7bf5d734d46fe1d8 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 Aug 2021 21:06:33 +1000 Subject: [PATCH 069/163] Updated comment [ci skip] --- src/PIL/JpegImagePlugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index 7d3cbbf499a..b8674eeed6b 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -172,7 +172,7 @@ def APP(self, marker): # SyntaxError for invalid/unreadable EXIF # KeyError for dpi not included # ZeroDivisionError for invalid dpi rational value - # ValueError for dpi being an invalid float + # ValueError or TypeError for dpi being an invalid float self.info["dpi"] = 72, 72 From 9f42a17b2d03631a8131ae0f7ebc27bed6309482 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 2 Aug 2021 21:42:03 +1000 Subject: [PATCH 070/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 6c2ba804d2e..13afddc6252 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Catch TypeError from corrupted DPI value in EXIF #5639 + [homm, radarhere] + - Do not close file pointer when saving SGI images #5645 [farizrahman4u, radarhere] From dab5721c344dd056a32527a6fd1d0a22f4bbd990 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 2 Aug 2021 22:09:35 +1000 Subject: [PATCH 071/163] Favour integer operations when calculating DPI --- src/PIL/Jpeg2KImagePlugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index 6f25c339055..0904b241be7 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -132,7 +132,7 @@ def _res_to_dpi(num, denom, exp): calculated as (num / denom) * 10^exp and stored in dots per meter, to floating-point dots per inch.""" if denom != 0: - return num / denom * (10 ** exp) * 0.0254 + return (254 * num * (10 ** exp)) / (10000 * denom) def _parse_jp2_header(fp): From 4f43851071bd43ce7c7670773c18a04f6405537b Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 3 Aug 2021 00:03:53 +1000 Subject: [PATCH 072/163] Added release notes [ci skip] --- docs/releasenotes/8.4.0.rst | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/releasenotes/8.4.0.rst b/docs/releasenotes/8.4.0.rst index 42e57745b5b..74b7d443882 100644 --- a/docs/releasenotes/8.4.0.rst +++ b/docs/releasenotes/8.4.0.rst @@ -35,7 +35,13 @@ TODO Other Changes ============= -TODO -^^^^ +Speed improvement when rotating square images +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -TODO +Starting with Pillow 3.3.0, the speed of rotating images by 90 or 270 degrees was +improved by quickly returning :py:meth:`~PIL.Image.Image.transpose` instead, if the +rotate operation allowed for expansion and did not specify a center or post-rotate +translation. + +Since the ``expand`` flag makes no difference for square images though, Pillow now +uses this faster method for square images without the ``expand`` flag as well. From 633d5d57f41aeded087eee08c44210a1cc0a1b09 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 3 Aug 2021 00:07:22 +1000 Subject: [PATCH 073/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 13afddc6252..b107e83e80c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Add support for reading DPI information from JPEG2000 images + [rogermb, radarhere] + - Catch TypeError from corrupted DPI value in EXIF #5639 [homm, radarhere] From b8b4bf425d3fac636b143971ddb3af36cc9b69eb Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 3 Aug 2021 08:02:40 +1000 Subject: [PATCH 074/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index b107e83e80c..d43a41d703d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Speed up rotating square images by 90 or 270 degrees #5646 + [radarhere] + - Add support for reading DPI information from JPEG2000 images [rogermb, radarhere] From 259c671a559bc3f5468e38a9af5661ebdc448a13 Mon Sep 17 00:00:00 2001 From: nulano Date: Mon, 2 Aug 2021 23:17:44 +0200 Subject: [PATCH 075/163] hide FriBiDi shim symbols to avoid conflict with real FriBiDi library --- src/thirdparty/fribidi-shim/fribidi.c | 4 ++-- src/thirdparty/fribidi-shim/fribidi.h | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/thirdparty/fribidi-shim/fribidi.c b/src/thirdparty/fribidi-shim/fribidi.c index abbab07b095..76fd5b9a498 100644 --- a/src/thirdparty/fribidi-shim/fribidi.c +++ b/src/thirdparty/fribidi-shim/fribidi.c @@ -12,7 +12,7 @@ /* FriBiDi>=1.0.0 adds bracket_types param, ignore and call legacy function */ -FriBidiLevel fribidi_get_par_embedding_levels_ex_compat( +static FriBidiLevel fribidi_get_par_embedding_levels_ex_compat( const FriBidiCharType *bidi_types, const FriBidiBracketType *bracket_types, const FriBidiStrIndex len, @@ -24,7 +24,7 @@ FriBidiLevel fribidi_get_par_embedding_levels_ex_compat( } /* FriBiDi>=1.0.0 gets bracket types here, ignore */ -void fribidi_get_bracket_types_compat( +static void fribidi_get_bracket_types_compat( const FriBidiChar *str, const FriBidiStrIndex len, const FriBidiCharType *types, diff --git a/src/thirdparty/fribidi-shim/fribidi.h b/src/thirdparty/fribidi-shim/fribidi.h index 7712a5b2297..7e175c3db80 100644 --- a/src/thirdparty/fribidi-shim/fribidi.h +++ b/src/thirdparty/fribidi-shim/fribidi.h @@ -63,8 +63,12 @@ typedef uint32_t FriBidiParType; /* functions */ #ifdef FRIBIDI_SHIM_IMPLEMENTATION +#ifdef _MSC_VER #define FRIBIDI_ENTRY #else +#define FRIBIDI_ENTRY __attribute__((visibility ("hidden"))) +#endif +#else #define FRIBIDI_ENTRY extern #endif From 6596e31605b7916610a69c491d76114f2058fede Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 5 Aug 2021 01:06:01 +1000 Subject: [PATCH 076/163] Determine mode purely from ihdr header box --- Tests/images/balloon_eciRGBv2_aware.jp2 | Bin 0 -> 7419 bytes Tests/test_file_jpeg2k.py | 10 +++++ src/PIL/Jpeg2KImagePlugin.py | 49 ++++++------------------ 3 files changed, 21 insertions(+), 38 deletions(-) create mode 100644 Tests/images/balloon_eciRGBv2_aware.jp2 diff --git a/Tests/images/balloon_eciRGBv2_aware.jp2 b/Tests/images/balloon_eciRGBv2_aware.jp2 new file mode 100644 index 0000000000000000000000000000000000000000..18fd1e1723de3237802ecf53839ac530d5321822 GIT binary patch literal 7419 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") + height, width, nc, bpc = header.read_fields(">IIHB") size = (width, height) - if unkc: - if nc == 1 and (bpc & 0x7F) > 8: - mode = "I;16" - elif nc == 1: - mode = "L" - elif nc == 2: - mode = "LA" - elif nc == 3: - mode = "RGB" - elif nc == 4: - mode = "RGBA" - elif tbox == b"colr": - meth, prec, approx = header.read_fields(">BBB") - if meth == 1 and unkc == 0: - cs = header.read_fields(">I")[0] - if cs == 16: # sRGB - if nc == 1 and (bpc & 0x7F) > 8: - mode = "I;16" - elif nc == 1: - mode = "L" - elif nc == 3: - mode = "RGB" - elif nc == 4: - mode = "RGBA" - elif cs == 17: # grayscale - if nc == 1 and (bpc & 0x7F) > 8: - mode = "I;16" - elif nc == 1: - mode = "L" - elif nc == 2: - mode = "LA" - elif cs == 18: # sYCC - if nc == 3: - mode = "RGB" - elif nc == 4: - mode = "RGBA" + if nc == 1 and (bpc & 0x7F) > 8: + mode = "I;16" + elif nc == 1: + mode = "L" + elif nc == 2: + mode = "LA" + elif nc == 3: + mode = "RGB" + elif nc == 4: + mode = "RGBA" elif tbox == b"res ": res = header.read_boxes() while res.has_next_box(): From 2dab52b8a8cc4e139a29ca78762079e573d32c31 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 5 Aug 2021 23:27:08 +1000 Subject: [PATCH 077/163] Allow saving 1 mode TIFF with PhotometricInterpretation 0 --- Tests/test_file_tiff.py | 8 ++++++++ src/PIL/TiffImagePlugin.py | 32 +++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 57f45bd09b2..a475c55b98e 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -447,6 +447,14 @@ def test_exif_frames(self): im.seek(1) assert im.getexif()[273] == (1408, 1907) + def test_photometric(self, tmp_path): + filename = str(tmp_path / "temp.tif") + im = hopper("1") + im.save(filename, tiffinfo={262: 0}) + with Image.open(filename) as reloaded: + assert reloaded.tag_v2[262] == 0 + assert_image_equal(im, reloaded) + def test_seek(self): filename = "Tests/images/pil136.tiff" with Image.open(filename) as im: diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index 6df4c361af6..2858694f859 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1487,7 +1487,9 @@ def _save(im, fp, filename): ifd = ImageFileDirectory_v2(prefix=prefix) - compression = im.encoderinfo.get("compression", im.info.get("compression")) + encoderinfo = im.encoderinfo + encoderconfig = im.encoderconfig + compression = encoderinfo.get("compression", im.info.get("compression")) if compression is None: compression = "raw" elif compression == "tiff_jpeg": @@ -1505,7 +1507,7 @@ def _save(im, fp, filename): ifd[IMAGELENGTH] = im.size[1] # write any arbitrary tags passed in as an ImageFileDirectory - info = im.encoderinfo.get("tiffinfo", {}) + info = encoderinfo.get("tiffinfo", {}) logger.debug("Tiffinfo Keys: %s" % list(info)) if isinstance(info, ImageFileDirectory_v1): info = info.to_v2() @@ -1534,7 +1536,7 @@ def _save(im, fp, filename): # preserve ICC profile (should also work when saving other formats # which support profiles as TIFF) -- 2008-06-06 Florian Hoech - icc = im.encoderinfo.get("icc_profile", im.info.get("icc_profile")) + icc = encoderinfo.get("icc_profile", im.info.get("icc_profile")) if icc: ifd[ICCPROFILE] = icc @@ -1550,10 +1552,10 @@ def _save(im, fp, filename): (ARTIST, "artist"), (COPYRIGHT, "copyright"), ]: - if name in im.encoderinfo: - ifd[key] = im.encoderinfo[name] + if name in encoderinfo: + ifd[key] = encoderinfo[name] - dpi = im.encoderinfo.get("dpi") + dpi = encoderinfo.get("dpi") if dpi: ifd[RESOLUTION_UNIT] = 2 ifd[X_RESOLUTION] = dpi[0] @@ -1568,7 +1570,15 @@ def _save(im, fp, filename): if format != 1: ifd[SAMPLEFORMAT] = format - ifd[PHOTOMETRIC_INTERPRETATION] = photo + if PHOTOMETRIC_INTERPRETATION not in ifd: + ifd[PHOTOMETRIC_INTERPRETATION] = photo + elif im.mode == "1" and ifd[PHOTOMETRIC_INTERPRETATION] == 0: + inverted_im = im.copy() + px = inverted_im.load() + for y in range(inverted_im.height): + for x in range(inverted_im.width): + px[x, y] = 0 if px[x, y] == 255 else 255 + im = inverted_im if im.mode in ["P", "PA"]: lut = im.im.getpalette("RGB", "RGB;L") @@ -1605,8 +1615,8 @@ def _save(im, fp, filename): ifd.setdefault(tag, value) if libtiff: - if "quality" in im.encoderinfo: - quality = im.encoderinfo["quality"] + if "quality" in encoderinfo: + quality = encoderinfo["quality"] if not isinstance(quality, int) or quality < 0 or quality > 100: raise ValueError("Invalid quality setting") if compression != "jpeg": @@ -1695,7 +1705,7 @@ def _save(im, fp, filename): tags = list(atts.items()) tags.sort() a = (rawmode, compression, _fp, filename, tags, types) - e = Image._getencoder(im.mode, "libtiff", a, im.encoderconfig) + e = Image._getencoder(im.mode, "libtiff", a, encoderconfig) e.setimage(im.im, (0, 0) + im.size) while True: # undone, change to self.decodermaxblock: @@ -1715,7 +1725,7 @@ def _save(im, fp, filename): ) # -- helper for multi-page save -- - if "_debug_multipage" in im.encoderinfo: + if "_debug_multipage" in encoderinfo: # just to access o32 and o16 (using correct byte order) im._debug_multipage = ifd From 887d111e4dc0ec1054e45931e17ac0f25dbb74a0 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 6 Aug 2021 22:01:06 +1000 Subject: [PATCH 078/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index d43a41d703d..e4e520496cf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,12 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Consider I;16 pixel size when drawing text #5598 + [radarhere] + +- If default conversion from P is RGB with transparency, convert to RGBA #5594 + [radarhere] + - Speed up rotating square images by 90 or 270 degrees #5646 [radarhere] From b3fda8c9c656231a426ae02c24645a5a4c2141e7 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 6 Aug 2021 22:33:55 +1000 Subject: [PATCH 079/163] Added release notes --- docs/releasenotes/8.4.0.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/releasenotes/8.4.0.rst b/docs/releasenotes/8.4.0.rst index 74b7d443882..7043e44ec47 100644 --- a/docs/releasenotes/8.4.0.rst +++ b/docs/releasenotes/8.4.0.rst @@ -19,10 +19,12 @@ the default required length, also removing the need for the size parameter. API Additions ============= -TODO -^^^^ +Added WalImageFile class +^^^^^^^^^^^^^^^^^^^^^^^^ -TODO +:py:func:`PIL.WalImageFile.open()` previously returned a generic +:py:class:`PIL.Image.Image` instance. It now returns a dedicated +:py:class:`PIL.WalImageFile.WalImageFile` class. Security ======== From 0c43da5e3cb18ac43f9f9b9e17f148b857fa8bc5 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 6 Aug 2021 22:41:44 +1000 Subject: [PATCH 080/163] Added release notes --- docs/releasenotes/8.4.0.rst | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/releasenotes/8.4.0.rst b/docs/releasenotes/8.4.0.rst index 74b7d443882..b90696f01d4 100644 --- a/docs/releasenotes/8.4.0.rst +++ b/docs/releasenotes/8.4.0.rst @@ -19,8 +19,17 @@ the default required length, also removing the need for the size parameter. API Additions ============= -TODO -^^^^ +Added "transparency" argument for loading EPS images +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This new argument switches the Ghostscript device from "ppmraw" to "pngalpha", +generating an RGBA image with a transparent background instead of an RGB image with a +white background. + +.. code-block:: python + + with Image.open("sample.eps") as im: + im.load(transparency=True) TODO From 6798c87caf25cedf0cef19245e7db1656aed8602 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 6 Aug 2021 23:31:14 +1000 Subject: [PATCH 081/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index e4e520496cf..4acf1253f61 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Added WalImageFile class #5618 + [radarhere] + - Consider I;16 pixel size when drawing text #5598 [radarhere] From 9bf7dae03d90fa48f61409d439d7ea7668f7e497 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 6 Aug 2021 23:50:52 +1000 Subject: [PATCH 082/163] Allow saving L mode TIFF with PhotometricInterpretation 0 --- Tests/test_file_tiff.py | 5 +++-- src/PIL/TiffImagePlugin.py | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index a475c55b98e..d5dda5799a6 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -447,9 +447,10 @@ def test_exif_frames(self): im.seek(1) assert im.getexif()[273] == (1408, 1907) - def test_photometric(self, tmp_path): + @pytest.mark.parametrize("mode", ("1", "L")) + def test_photometric(self, mode, tmp_path): filename = str(tmp_path / "temp.tif") - im = hopper("1") + im = hopper(mode) im.save(filename, tiffinfo={262: 0}) with Image.open(filename) as reloaded: assert reloaded.tag_v2[262] == 0 diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index 2858694f859..15678948c4a 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -48,7 +48,7 @@ from fractions import Fraction from numbers import Number, Rational -from . import Image, ImageFile, ImagePalette, TiffTags +from . import Image, ImageFile, ImageOps, ImagePalette, TiffTags from ._binary import o8 from .TiffTags import TYPES @@ -1572,13 +1572,16 @@ def _save(im, fp, filename): if PHOTOMETRIC_INTERPRETATION not in ifd: ifd[PHOTOMETRIC_INTERPRETATION] = photo - elif im.mode == "1" and ifd[PHOTOMETRIC_INTERPRETATION] == 0: - inverted_im = im.copy() - px = inverted_im.load() - for y in range(inverted_im.height): - for x in range(inverted_im.width): - px[x, y] = 0 if px[x, y] == 255 else 255 - im = inverted_im + elif im.mode in ("1", "L") and ifd[PHOTOMETRIC_INTERPRETATION] == 0: + if im.mode == "1": + inverted_im = im.copy() + px = inverted_im.load() + for y in range(inverted_im.height): + for x in range(inverted_im.width): + px[x, y] = 0 if px[x, y] == 255 else 255 + im = inverted_im + else: + im = ImageOps.invert(im) if im.mode in ["P", "PA"]: lut = im.im.getpalette("RGB", "RGB;L") From 99940765b2763f7e5c014ca4335d1568b89cd416 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 7 Aug 2021 09:39:41 +1000 Subject: [PATCH 083/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 4acf1253f61..2c0671ac202 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,12 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Added "transparency" argument to EpsImagePlugin load() #5620 + [radarhere] + +- Corrected pathlib.Path detection when saving #5633 + [radarhere] + - Added WalImageFile class #5618 [radarhere] From 9ad8c0c41585eadd3a05ef381f83f44645d8beda Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 8 Aug 2021 13:08:42 +1000 Subject: [PATCH 084/163] Updated location of make_hash script [ci skip] --- src/libImaging/Access.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libImaging/Access.c b/src/libImaging/Access.c index 6bb16fe3a54..514fb292913 100644 --- a/src/libImaging/Access.c +++ b/src/libImaging/Access.c @@ -11,7 +11,7 @@ #include "Imaging.h" -/* use Tests/make_hash.py to calculate these values */ +/* use make_hash.py from the pillow-scripts repository to calculate these values */ #define ACCESS_TABLE_SIZE 27 #define ACCESS_TABLE_HASH 3078 From 8f300af691efb83b6f7db76bf5f6fe66cbce6f02 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Sun, 8 Aug 2021 15:01:19 +0200 Subject: [PATCH 085/163] Actually check the framesize in FliDecode. --- src/libImaging/FliDecode.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libImaging/FliDecode.c b/src/libImaging/FliDecode.c index 3a6030703ec..f5643203460 100644 --- a/src/libImaging/FliDecode.c +++ b/src/libImaging/FliDecode.c @@ -46,7 +46,8 @@ ImagingFliDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t byt ptr = buf; framesize = I32(ptr); - if (framesize < I32(ptr)) { + // there can be one pad byte in the framesize + if (bytes + (bytes % 2) < framesize) { return 0; } From db3cccb9c0f5ec936fe5e9b7270eb2e19d20b46e Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 9 Aug 2021 08:30:37 +1000 Subject: [PATCH 086/163] Updated MinGW CI Python version [ci skip] --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 2b642bf4e4b..fc6fb76ad27 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -476,7 +476,7 @@ These platforms are built and tested for every change. | +---------------------------+---------------------+ | | PyPy3 | x86 | | +---------------------------+---------------------+ -| | 3.8/MinGW | x86, x86-64 | +| | 3.9/MinGW | x86, x86-64 | +----------------------------------+---------------------------+---------------------+ From 81e866a82420d96d6f656ad52695abe44c3495fd Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Mon, 9 Aug 2021 16:17:09 +0300 Subject: [PATCH 087/163] Wheel now works on Python 3.10 --- .ci/install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.ci/install.sh b/.ci/install.sh index 0dbf2d690c7..03e3649ff41 100755 --- a/.ci/install.sh +++ b/.ci/install.sh @@ -35,8 +35,7 @@ python3 -m pip install test-image-results if ! [ "$GHA_PYTHON_VERSION" == "3.10-dev" ]; then python3 -m pip install numpy ; fi # PyQt5 doesn't support PyPy3 -# Wheel doesn't yet support 3.10 -if [[ $GHA_PYTHON_VERSION == 3.* && $GHA_PYTHON_VERSION != "3.10-dev" ]]; then +if [[ $GHA_PYTHON_VERSION == 3.* ]]; then # arm64, ppc64le, s390x CPUs: # "ERROR: Could not find a version that satisfies the requirement pyqt5" sudo apt-get -qq install libxcb-xinerama0 pyqt5-dev-tools From 370f32ba720a446d9e53842f0ebaed96bfa31478 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 29 Jul 2021 12:04:48 +0300 Subject: [PATCH 088/163] Install wheel on CI to avoid legacy setup.py installs --- .ci/install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.ci/install.sh b/.ci/install.sh index 03e3649ff41..0f3a36bc42f 100755 --- a/.ci/install.sh +++ b/.ci/install.sh @@ -22,6 +22,7 @@ sudo apt-get -qq install libfreetype6-dev liblcms2-dev python3-tk\ cmake imagemagick libharfbuzz-dev libfribidi-dev python3 -m pip install --upgrade pip +python3 -m pip install --upgrade wheel PYTHONOPTIMIZE=0 python3 -m pip install cffi python3 -m pip install coverage python3 -m pip install defusedxml From cbdc7516280776945579d14c017a0d636a9df9e4 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 10 Aug 2021 07:04:36 +1000 Subject: [PATCH 089/163] Read AND mask from end --- Tests/images/hopper_mask.ico | Bin 0 -> 262 bytes Tests/images/hopper_mask.png | Bin 0 -> 208 bytes Tests/test_file_ico.py | 5 +++++ src/PIL/IcoImagePlugin.py | 2 +- 4 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 Tests/images/hopper_mask.ico create mode 100644 Tests/images/hopper_mask.png diff --git a/Tests/images/hopper_mask.ico b/Tests/images/hopper_mask.ico new file mode 100644 index 0000000000000000000000000000000000000000..e8d66c689fd42918c887a316f34a8e0d3ae8c154 GIT binary patch literal 262 zcmZQzU<5(|0R|voWcUCi#ei4?h(SUMKn#)x0S6#H!Uw@jKsE@2z<(eB(WVVRwX8sK zP6h^MAls>vfx&}^fkEU61B2iT1_s_L28MSJ7#LdT0~I#{)dDSQ{l~z-X#g|>C^V25 E0C?>&ZU6uP literal 0 HcmV?d00001 diff --git a/Tests/images/hopper_mask.png b/Tests/images/hopper_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bd2f70842801aa0db7150ece834f839cf10376 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`(>+}rLn`L<21oN9Q4nZa_I!qfYIUFP)0s%}Q9FmwCmw=?2hLgO~cOSmGXm_xh*B`+Q&1olYF0)pbt5W}{+Q^;C{dV?S z8Hqw`c2h^It&)X%L^GPNyb5**di(nezsJ8iZi_u`3>6H8wpEfdPQP6NbRvVNtDnm{ Hr-UW|-Oo~i literal 0 HcmV?d00001 diff --git a/Tests/test_file_ico.py b/Tests/test_file_ico.py index 8060d1b763b..317264db646 100644 --- a/Tests/test_file_ico.py +++ b/Tests/test_file_ico.py @@ -18,6 +18,11 @@ def test_sanity(): assert im.get_format_mimetype() == "image/x-icon" +def test_mask(): + with Image.open("Tests/images/hopper_mask.ico") as im: + assert_image_equal_tofile(im, "Tests/images/hopper_mask.png") + + def test_black_and_white(): with Image.open("Tests/images/black_and_white.ico") as im: assert im.mode == "RGBA" diff --git a/src/PIL/IcoImagePlugin.py b/src/PIL/IcoImagePlugin.py index ffb1e873d23..d9ff9b5e731 100644 --- a/src/PIL/IcoImagePlugin.py +++ b/src/PIL/IcoImagePlugin.py @@ -235,8 +235,8 @@ def frame(self, idx): # the total mask data is # padded row size * height / bits per char - and_mask_offset = o + int(im.size[0] * im.size[1] * (bpp / 8.0)) total_bytes = int((w * im.size[1]) / 8) + and_mask_offset = header["offset"] + header["size"] - total_bytes self.buf.seek(and_mask_offset) mask_data = self.buf.read(total_bytes) From 771c7d937ee3455ea7ac62983eb66b6fa19781ad Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 10 Aug 2021 12:46:12 +1000 Subject: [PATCH 090/163] Install numpy on Python 3.10 --- .github/workflows/macos-install.sh | 3 +-- .github/workflows/test.yml | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/macos-install.sh b/.github/workflows/macos-install.sh index 3a70c8047e9..8260cf8d8d3 100755 --- a/.github/workflows/macos-install.sh +++ b/.github/workflows/macos-install.sh @@ -15,8 +15,7 @@ python3 -m pip install pyroma python3 -m pip install test-image-results echo -e "[openblas]\nlibraries = openblas\nlibrary_dirs = /usr/local/opt/openblas/lib" >> ~/.numpy-site.cfg -# TODO Remove condition when numpy supports 3.10 -if ! [ "$GHA_PYTHON_VERSION" == "3.10-dev" ]; then python3 -m pip install numpy ; fi +python3 -m pip install numpy # extra test images pushd depends && ./install_extra_test_images.sh && popd diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 042e6d83ecc..cd85bc53764 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -72,8 +72,6 @@ jobs: if: startsWith(matrix.os, 'macOS') run: | .github/workflows/macos-install.sh - env: - GHA_PYTHON_VERSION: ${{ matrix.python-version }} - name: Build run: | From eaa7b829e284e37cf6b1af46ca2561044510f24b Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 10 Aug 2021 16:50:56 +1000 Subject: [PATCH 091/163] Updated libjpeg-turbo to 2.1.1 --- winbuild/build_prepare.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index a9ca8dd6cc9..eddb039158c 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -105,9 +105,9 @@ def cmd_msbuild( # dependencies, listed in order of compilation deps = { "libjpeg": { - "url": SF_MIRROR + "/project/libjpeg-turbo/2.1.0/libjpeg-turbo-2.1.0.tar.gz", - "filename": "libjpeg-turbo-2.1.0.tar.gz", - "dir": "libjpeg-turbo-2.1.0", + "url": SF_MIRROR + "/project/libjpeg-turbo/2.1.1/libjpeg-turbo-2.1.1.tar.gz", + "filename": "libjpeg-turbo-2.1.1.tar.gz", + "dir": "libjpeg-turbo-2.1.1", "build": [ cmd_cmake( [ From 98aa0f10addc5557b7be6d6ea928a8511ab81c04 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 12 Aug 2021 21:50:09 +1000 Subject: [PATCH 092/163] pre-commit autoupdate --freeze --- .pre-commit-config.yaml | 14 +++++++------- Tests/check_large_memory.py | 2 +- Tests/check_large_memory_numpy.py | 2 +- Tests/test_file_dds.py | 6 +++--- Tests/test_file_jpeg.py | 2 +- Tests/test_file_libtiff.py | 6 +++--- Tests/test_file_tiff_metadata.py | 2 +- Tests/test_image_array.py | 2 +- Tests/test_image_point.py | 2 +- src/PIL/BmpImagePlugin.py | 6 +++--- src/PIL/PyAccess.py | 20 ++++++++++---------- 11 files changed, 32 insertions(+), 32 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8d38375f0ae..6319d06b12a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black - rev: e66be67b9b6811913470f70c28b4d50f94d05b22 # frozen: 20.8b1 + rev: e3000ace2fd1fcb1c181bb7a8285f1f976bcbdc7 # frozen: 21.7b0 hooks: - id: black args: ["--target-version", "py36"] @@ -9,35 +9,35 @@ repos: types: [] - repo: https://github.com/PyCQA/isort - rev: 377d260ffa6f746693f97b46d95025afc4bd8275 # frozen: 5.4.2 + rev: fd5ba70665a37ec301a1f714ed09336048b3be63 # frozen: 5.9.3 hooks: - id: isort - repo: https://github.com/asottile/yesqa - rev: 7a009f3ee493c796827ee334f9058b110a0e0db8 # frozen: v1.2.1 + rev: 644ede78511c02fc6f8e03e014cc1ddcfbf1e1f5 # frozen: v1.2.3 hooks: - id: yesqa - repo: https://github.com/Lucas-C/pre-commit-hooks - rev: f30f4974a08a6b2f6a1eeaf30a4d501cf909163a # frozen: v1.1.9 + rev: 3592548bbd98528887eeed63486cf6c9bae00b98 # frozen: v1.1.10 hooks: - id: remove-tabs exclude: (Makefile$|\.bat$|\.cmake$|\.eps$|\.fits$|\.opt$) - repo: https://gitlab.com/pycqa/flake8 - rev: 05f6544aef321e2fee03a1277ce2eef8880fb927 # frozen: 3.8.3 + rev: dcd740bc0ebaf2b3d43e59a0060d157c97de13f3 # frozen: 3.9.2 hooks: - id: flake8 additional_dependencies: [flake8-2020, flake8-implicit-str-concat] - repo: https://github.com/pre-commit/pygrep-hooks - rev: eae6397e4c259ed3d057511f6dd5330b92867e62 # frozen: v1.6.0 + rev: 6f51a66bba59954917140ec2eeeaa4d5e630e6ce # frozen: v1.9.0 hooks: - id: python-check-blanket-noqa - id: rst-backticks - repo: https://github.com/pre-commit/pre-commit-hooks - rev: e1668fe86af3810fbca72b8653fe478e66a0afdc # frozen: v3.2.0 + rev: 38b88246ccc552bffaaf54259d064beeee434539 # frozen: v4.0.1 hooks: - id: check-merge-conflict - id: check-yaml diff --git a/Tests/check_large_memory.py b/Tests/check_large_memory.py index 723a1a21eac..c191ffc1eb8 100644 --- a/Tests/check_large_memory.py +++ b/Tests/check_large_memory.py @@ -33,7 +33,7 @@ def _write_png(tmp_path, xdim, ydim): def test_large(tmp_path): - """ succeeded prepatch""" + """succeeded prepatch""" _write_png(tmp_path, XDIM, YDIM) diff --git a/Tests/check_large_memory_numpy.py b/Tests/check_large_memory_numpy.py index 79d1cfd5bf5..70ae6d230b8 100644 --- a/Tests/check_large_memory_numpy.py +++ b/Tests/check_large_memory_numpy.py @@ -31,7 +31,7 @@ def _write_png(tmp_path, xdim, ydim): def test_large(tmp_path): - """ succeeded prepatch""" + """succeeded prepatch""" _write_png(tmp_path, XDIM, YDIM) diff --git a/Tests/test_file_dds.py b/Tests/test_file_dds.py index 46ebcad0c1e..2f46ed77e0c 100644 --- a/Tests/test_file_dds.py +++ b/Tests/test_file_dds.py @@ -197,7 +197,7 @@ def test__accept_false(): def test_short_header(): - """ Check a short header""" + """Check a short header""" with open(TEST_FILE_DXT5, "rb") as f: img_file = f.read() @@ -210,7 +210,7 @@ def short_header(): def test_short_file(): - """ Check that the appropriate error is thrown for a short file""" + """Check that the appropriate error is thrown for a short file""" with open(TEST_FILE_DXT5, "rb") as f: img_file = f.read() @@ -224,7 +224,7 @@ def short_file(): def test_dxt5_colorblock_alpha_issue_4142(): - """ Check that colorblocks are decoded correctly in DXT5""" + """Check that colorblocks are decoded correctly in DXT5""" with Image.open("Tests/images/dxt5-colorblock-alpha-issue-4142.dds") as im: px = im.getpixel((0, 0)) diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index 15518756c1c..13d99c15dc5 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -630,7 +630,7 @@ def test_MAXBLOCK_scaling(self, tmp_path): reloaded.save(f, quality="keep", optimize=True) def test_bad_mpo_header(self): - """ Treat unknown MPO as JPEG """ + """Treat unknown MPO as JPEG""" # Arrange # Act diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index e4393cb4450..1d0c93f06aa 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -97,13 +97,13 @@ def test_g4_non_disk_file_object(self, tmp_path): self._assert_noerr(tmp_path, im) def test_g4_eq_png(self): - """ Checking that we're actually getting the data that we expect""" + """Checking that we're actually getting the data that we expect""" with Image.open("Tests/images/hopper_bw_500.png") as png: assert_image_equal_tofile(png, "Tests/images/hopper_g4_500.tif") # see https://github.com/python-pillow/Pillow/issues/279 def test_g4_fillorder_eq_png(self): - """ Checking that we're actually getting the data that we expect""" + """Checking that we're actually getting the data that we expect""" with Image.open("Tests/images/g4-fillorder-test.tif") as g4: assert_image_equal_tofile(g4, "Tests/images/g4-fillorder-test.png") @@ -137,7 +137,7 @@ def test_adobe_deflate_tiff(self): assert_image_equal_tofile(im, "Tests/images/tiff_adobe_deflate.png") def test_write_metadata(self, tmp_path): - """ Test metadata writing through libtiff """ + """Test metadata writing through libtiff""" for legacy_api in [False, True]: f = str(tmp_path / "temp.tiff") with Image.open("Tests/images/hopper_g4.tif") as img: diff --git a/Tests/test_file_tiff_metadata.py b/Tests/test_file_tiff_metadata.py index 0adbaf0161e..2213af5aadf 100644 --- a/Tests/test_file_tiff_metadata.py +++ b/Tests/test_file_tiff_metadata.py @@ -122,7 +122,7 @@ def test_read_metadata(): def test_write_metadata(tmp_path): - """ Test metadata writing through the python code """ + """Test metadata writing through the python code""" with Image.open("Tests/images/hopper.tif") as img: f = str(tmp_path / "temp.tiff") img.save(f, tiffinfo=img.tag) diff --git a/Tests/test_image_array.py b/Tests/test_image_array.py index 850dc2aaa3e..5c9cdd7e0e0 100644 --- a/Tests/test_image_array.py +++ b/Tests/test_image_array.py @@ -41,7 +41,7 @@ def test_with_dtype(dtype): def test_fromarray(): class Wrapper: - """ Class with API matching Image.fromarray """ + """Class with API matching Image.fromarray""" def __init__(self, img, arr_params): self.img = img diff --git a/Tests/test_image_point.py b/Tests/test_image_point.py index 51108ead2fd..366f458544f 100644 --- a/Tests/test_image_point.py +++ b/Tests/test_image_point.py @@ -32,7 +32,7 @@ def test_16bit_lut(): def test_f_lut(): - """ Tests for floating point lut of 8bit gray image """ + """Tests for floating point lut of 8bit gray image""" im = hopper("L") lut = [0.5 * float(x) for x in range(256)] diff --git a/src/PIL/BmpImagePlugin.py b/src/PIL/BmpImagePlugin.py index 821844484da..7bfe733e52d 100644 --- a/src/PIL/BmpImagePlugin.py +++ b/src/PIL/BmpImagePlugin.py @@ -58,7 +58,7 @@ def _dib_accept(prefix): # Image plugin for the Windows BMP format. # ============================================================================= class BmpImageFile(ImageFile.ImageFile): - """ Image plugin for the Windows Bitmap format (BMP) """ + """Image plugin for the Windows Bitmap format (BMP)""" # ------------------------------------------------------------- Description format_description = "Windows Bitmap" @@ -70,7 +70,7 @@ class BmpImageFile(ImageFile.ImageFile): vars()[k] = v def _bitmap(self, header=0, offset=0): - """ Read relevant info about the BMP """ + """Read relevant info about the BMP""" read, seek = self.fp.read, self.fp.seek if header: seek(header) @@ -257,7 +257,7 @@ def _bitmap(self, header=0, offset=0): ] def _open(self): - """ Open file, check magic number and read header """ + """Open file, check magic number and read header""" # read 14 bytes: magic number, filesize, reserved, header final offset head_data = self.fp.read(14) # choke if the file does not have the required magic bytes diff --git a/src/PIL/PyAccess.py b/src/PIL/PyAccess.py index 5ceaa238a8f..eeaa0ccc472 100644 --- a/src/PIL/PyAccess.py +++ b/src/PIL/PyAccess.py @@ -128,7 +128,7 @@ def check_xy(self, xy): class _PyAccess32_2(PyAccess): - """ PA, LA, stored in first and last bytes of a 32 bit word """ + """PA, LA, stored in first and last bytes of a 32 bit word""" def _post_init(self, *args, **kwargs): self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) @@ -145,7 +145,7 @@ def set_pixel(self, x, y, color): class _PyAccess32_3(PyAccess): - """ RGB and friends, stored in the first three bytes of a 32 bit word """ + """RGB and friends, stored in the first three bytes of a 32 bit word""" def _post_init(self, *args, **kwargs): self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) @@ -164,7 +164,7 @@ def set_pixel(self, x, y, color): class _PyAccess32_4(PyAccess): - """ RGBA etc, all 4 bytes of a 32 bit word """ + """RGBA etc, all 4 bytes of a 32 bit word""" def _post_init(self, *args, **kwargs): self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) @@ -183,7 +183,7 @@ def set_pixel(self, x, y, color): class _PyAccess8(PyAccess): - """ 1, L, P, 8 bit images stored as uint8 """ + """1, L, P, 8 bit images stored as uint8""" def _post_init(self, *args, **kwargs): self.pixels = self.image8 @@ -201,7 +201,7 @@ def set_pixel(self, x, y, color): class _PyAccessI16_N(PyAccess): - """ I;16 access, native bitendian without conversion """ + """I;16 access, native bitendian without conversion""" def _post_init(self, *args, **kwargs): self.pixels = ffi.cast("unsigned short **", self.image) @@ -219,7 +219,7 @@ def set_pixel(self, x, y, color): class _PyAccessI16_L(PyAccess): - """ I;16L access, with conversion """ + """I;16L access, with conversion""" def _post_init(self, *args, **kwargs): self.pixels = ffi.cast("struct Pixel_I16 **", self.image) @@ -240,7 +240,7 @@ def set_pixel(self, x, y, color): class _PyAccessI16_B(PyAccess): - """ I;16B access, with conversion """ + """I;16B access, with conversion""" def _post_init(self, *args, **kwargs): self.pixels = ffi.cast("struct Pixel_I16 **", self.image) @@ -261,7 +261,7 @@ def set_pixel(self, x, y, color): class _PyAccessI32_N(PyAccess): - """ Signed Int32 access, native endian """ + """Signed Int32 access, native endian""" def _post_init(self, *args, **kwargs): self.pixels = self.image32 @@ -274,7 +274,7 @@ def set_pixel(self, x, y, color): class _PyAccessI32_Swap(PyAccess): - """ I;32L/B access, with byteswapping conversion """ + """I;32L/B access, with byteswapping conversion""" def _post_init(self, *args, **kwargs): self.pixels = self.image32 @@ -293,7 +293,7 @@ def set_pixel(self, x, y, color): class _PyAccessF(PyAccess): - """ 32 bit float access """ + """32 bit float access""" def _post_init(self, *args, **kwargs): self.pixels = ffi.cast("float **", self.image32) From fc95a0c3c04cb54d87c0477166d2be0b28dfe9a9 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 12 Aug 2021 22:36:41 +1000 Subject: [PATCH 093/163] Added quarterly autoupdate_schedule --- .pre-commit-config.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6319d06b12a..55fe9c4a758 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,3 +41,6 @@ repos: hooks: - id: check-merge-conflict - id: check-yaml + +ci: + autoupdate_schedule: quarterly From 0cbc033b34543637429dd4aa09f79f504523ebc9 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 13 Aug 2021 17:54:48 +1000 Subject: [PATCH 094/163] Updated FreeBSD package install command to Python 3.8 [ci skip] --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 2b642bf4e4b..e10f783c354 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -111,7 +111,7 @@ Pillow can be installed on FreeBSD via the official Ports or Packages systems: **Packages**:: - pkg install py36-pillow + pkg install py38-pillow .. note:: From 5db0969f6f9873bd15aededab9ef413f043f1ea4 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 14 Aug 2021 08:33:28 +1000 Subject: [PATCH 095/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 2c0671ac202..990495ff235 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,15 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- For GIF save_all with palette, do not include palette with each frame #5603 + [radarhere] + +- Keep transparency when converting from P to LA or PA #5606 + [radarhere] + +- Copy palette to new image in transform() #5647 + [radarhere] + - Added "transparency" argument to EpsImagePlugin load() #5620 [radarhere] From 4419eda505592ab5ae079fe6b23e220696978c13 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 14 Aug 2021 19:55:01 +1000 Subject: [PATCH 096/163] Updated libwebp to 1.2.1 --- depends/install_webp.sh | 2 +- winbuild/build_prepare.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/depends/install_webp.sh b/depends/install_webp.sh index 568cb2df953..4a4e7430545 100755 --- a/depends/install_webp.sh +++ b/depends/install_webp.sh @@ -1,7 +1,7 @@ #!/bin/bash # install webp -archive=libwebp-1.2.0 +archive=libwebp-1.2.1 ./download-and-extract.sh $archive https://raw.githubusercontent.com/python-pillow/pillow-depends/master/$archive.tar.gz diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index eddb039158c..4936659024f 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -154,9 +154,9 @@ def cmd_msbuild( # "bins": [r"libtiff\*.dll"], }, "libwebp": { - "url": "http://downloads.webmproject.org/releases/webp/libwebp-1.2.0.tar.gz", - "filename": "libwebp-1.2.0.tar.gz", - "dir": "libwebp-1.2.0", + "url": "http://downloads.webmproject.org/releases/webp/libwebp-1.2.1.tar.gz", + "filename": "libwebp-1.2.1.tar.gz", + "dir": "libwebp-1.2.1", "build": [ cmd_rmdir(r"output\release-static"), # clean cmd_nmake( From 26d932505f94b40da4de7d253dc1201a932db69e Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 15 Aug 2021 17:28:52 +1000 Subject: [PATCH 097/163] Corrected property name [ci skip] --- docs/handbook/image-file-formats.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/handbook/image-file-formats.rst b/docs/handbook/image-file-formats.rst index 06d262d435f..a6d5d70935b 100644 --- a/docs/handbook/image-file-formats.rst +++ b/docs/handbook/image-file-formats.rst @@ -844,7 +844,7 @@ Reading Multi-frame TIFF Images The TIFF loader supports the :py:meth:`~PIL.Image.Image.seek` and :py:meth:`~PIL.Image.Image.tell` methods, taking and returning frame numbers within the image file. You can combine these methods to seek to the next frame -(``im.seek(im.tell() + 1)``). Frames are numbered from 0 to ``im.num_frames - 1``, +(``im.seek(im.tell() + 1)``). Frames are numbered from 0 to ``im.n_frames - 1``, and can be accessed in any order. ``im.seek()`` raises an :py:exc:`EOFError` if you try to seek after the From f518149a1bbe5ebea9d0ca41612e3e6748349ace Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 16 Aug 2021 10:59:51 +1000 Subject: [PATCH 098/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 990495ff235..4e4e9648b61 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Allow saving 1 and L mode TIFF with PhotometricInterpretation 0 #5655 + [radarhere] + - For GIF save_all with palette, do not include palette with each frame #5603 [radarhere] From c5ac9326388d3f9995699ca201c82d242d7f03ab Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 18 Aug 2021 21:55:12 +1000 Subject: [PATCH 099/163] Updated harfbuzz to 2.9.0 --- winbuild/build_prepare.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index 4936659024f..ffffaf66272 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -277,9 +277,9 @@ def cmd_msbuild( "libs": [r"*.lib"], }, "harfbuzz": { - "url": "https://github.com/harfbuzz/harfbuzz/archive/2.8.2.zip", - "filename": "harfbuzz-2.8.2.zip", - "dir": "harfbuzz-2.8.2", + "url": "https://github.com/harfbuzz/harfbuzz/archive/2.9.0.zip", + "filename": "harfbuzz-2.9.0.zip", + "dir": "harfbuzz-2.9.0", "build": [ cmd_cmake("-DHB_HAVE_FREETYPE:BOOL=TRUE"), cmd_nmake(target="clean"), From 2b9e230f76d28b868297039dfcbbeef98dca9ceb Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 24 Aug 2021 10:58:02 +0300 Subject: [PATCH 100/163] Fix ResourceWarning: unclosed file --- Tests/test_imagepalette.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index 5a59b779923..475d249ed09 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -16,10 +16,10 @@ def test_sanity(): def test_reload(): - im = Image.open("Tests/images/hopper.gif") - original = im.copy() - im.palette.dirty = 1 - assert_image_equal(im.convert("RGB"), original.convert("RGB")) + with Image.open("Tests/images/hopper.gif") as im: + original = im.copy() + im.palette.dirty = 1 + assert_image_equal(im.convert("RGB"), original.convert("RGB")) def test_getcolor(): From 474270fbd587cf303232dcde5bae350f2d34ce38 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 24 Aug 2021 11:03:10 +0300 Subject: [PATCH 101/163] Filter out UserWarning: Truncated File Read --- Tests/test_tiff_crashes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/test_tiff_crashes.py b/Tests/test_tiff_crashes.py index 6cdb8e44da2..143765b8eec 100644 --- a/Tests/test_tiff_crashes.py +++ b/Tests/test_tiff_crashes.py @@ -40,6 +40,7 @@ ) @pytest.mark.filterwarnings("ignore:Possibly corrupt EXIF data") @pytest.mark.filterwarnings("ignore:Metadata warning") +@pytest.mark.filterwarnings("ignore:Truncated File Read") def test_tiff_crashes(test_file): try: with Image.open(test_file) as im: From 320ab8172e0d45b57a01c21cb0905abdf8593849 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 24 Aug 2021 11:19:45 +0300 Subject: [PATCH 102/163] Avoid DecompressionBombWarning: Image size (151587072 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack. --- Tests/test_map.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Tests/test_map.py b/Tests/test_map.py index 752c5f2685c..42f3447ebfd 100644 --- a/Tests/test_map.py +++ b/Tests/test_map.py @@ -24,11 +24,17 @@ def test_overflow(): def test_tobytes(): + # Note that this image triggers the decompression bomb warning: + max_pixels = Image.MAX_IMAGE_PIXELS + Image.MAX_IMAGE_PIXELS = None + # Previously raised an access violation on Windows with Image.open("Tests/images/l2rgb_read.bmp") as im: with pytest.raises((ValueError, MemoryError, OSError)): im.tobytes() + Image.MAX_IMAGE_PIXELS = max_pixels + @pytest.mark.skipif(sys.maxsize <= 2 ** 32, reason="Requires 64-bit system") def test_ysize(): From 2f8b3d0ff948942e609dd377c5ad1827c6830587 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 24 Aug 2021 11:20:09 +0300 Subject: [PATCH 103/163] Ignore new test_images file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5500ec0372f..790404535f7 100644 --- a/.gitignore +++ b/.gitignore @@ -83,6 +83,7 @@ docs/_build/ Tests/images/README.md Tests/images/crash_1.tif Tests/images/crash_2.tif +Tests/images/crash-81154a65438ba5aaeca73fd502fa4850fbde60f8.tif Tests/images/string_dimension.tiff Tests/images/jpeg2000 Tests/images/msp From d773fcd23d01c19af2cfbc280b8421ddfa0908e6 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 24 Aug 2021 11:33:43 +0300 Subject: [PATCH 104/163] Filter out UserWarning: Truncated File Read --- Tests/test_file_tiff.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index d5dda5799a6..236fcf44511 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -698,6 +698,8 @@ def test_close_on_load_nonexclusive(self, tmp_path): # Ignore this UserWarning which triggers for four tags: # "Possibly corrupt EXIF data. Expecting to read 50404352 bytes but..." @pytest.mark.filterwarnings("ignore:Possibly corrupt EXIF data") + # Ignore this UserWarning: + @pytest.mark.filterwarnings("ignore:Truncated File Read") @pytest.mark.skipif( not os.path.exists("Tests/images/string_dimension.tiff"), reason="Extra image files not installed", From 7f3646493cbe4ae5e3edc44cd5e4b8f7f04a410a Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 24 Aug 2021 21:56:36 +1000 Subject: [PATCH 105/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 4e4e9648b61..9de7dd82e72 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,12 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Updates for ImagePalette channel order #5599 + [radarhere] + +- Fixed using info dictionary when writing multiple APNG frames #5611 + [radarhere] + - Allow saving 1 and L mode TIFF with PhotometricInterpretation 0 #5655 [radarhere] From d50052a75c4d0d17d3d37c24a4558c9e0736f0e8 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 24 Aug 2021 22:33:08 +1000 Subject: [PATCH 106/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 9de7dd82e72..977323f9f7f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Determine JPEG2000 mode purely from ihdr header box #5654 + [radarhere] + - Updates for ImagePalette channel order #5599 [radarhere] From 9d4814356700e166ff0ceeb8cb713d23fc231b93 Mon Sep 17 00:00:00 2001 From: Julien Voisin Date: Wed, 25 Aug 2021 16:45:39 +0200 Subject: [PATCH 107/163] Improve the fuzzer wrt. the current atheris version --- Tests/oss-fuzz/fuzz_font.py | 12 ++++++------ Tests/oss-fuzz/fuzz_pillow.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Tests/oss-fuzz/fuzz_font.py b/Tests/oss-fuzz/fuzz_font.py index e1147101187..0cc4a99ef51 100755 --- a/Tests/oss-fuzz/fuzz_font.py +++ b/Tests/oss-fuzz/fuzz_font.py @@ -14,10 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -import sys -import atheris_no_libfuzzer as atheris -import fuzzers +import atheris +with atheris.instrument_imports(): + import sys + import fuzzers def TestOneInput(data): @@ -26,13 +27,12 @@ def TestOneInput(data): except Exception: # We're catching all exceptions because Pillow's exceptions are # directly inheriting from Exception. - return - return + pass def main(): fuzzers.enable_decompressionbomb_error() - atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) + atheris.Setup(sys.argv, TestOneInput) atheris.Fuzz() fuzzers.disable_decompressionbomb_error() diff --git a/Tests/oss-fuzz/fuzz_pillow.py b/Tests/oss-fuzz/fuzz_pillow.py index b3c55fe22ec..3dd1aea0d22 100644 --- a/Tests/oss-fuzz/fuzz_pillow.py +++ b/Tests/oss-fuzz/fuzz_pillow.py @@ -14,10 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -import sys -import atheris_no_libfuzzer as atheris -import fuzzers +import atheris +with atheris.instrument_imports(): + import sys + import fuzzers def TestOneInput(data): @@ -26,13 +27,12 @@ def TestOneInput(data): except Exception: # We're catching all exceptions because Pillow's exceptions are # directly inheriting from Exception. - return - return + pass def main(): fuzzers.enable_decompressionbomb_error() - atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) + atheris.Setup(sys.argv, TestOneInput) atheris.Fuzz() fuzzers.disable_decompressionbomb_error() From 3b69035d4b36af359917136c6dde2d953be5a332 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 25 Aug 2021 14:52:16 +0000 Subject: [PATCH 108/163] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- Tests/oss-fuzz/fuzz_font.py | 2 ++ Tests/oss-fuzz/fuzz_pillow.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Tests/oss-fuzz/fuzz_font.py b/Tests/oss-fuzz/fuzz_font.py index 0cc4a99ef51..bc2ba9a7e27 100755 --- a/Tests/oss-fuzz/fuzz_font.py +++ b/Tests/oss-fuzz/fuzz_font.py @@ -16,8 +16,10 @@ import atheris + with atheris.instrument_imports(): import sys + import fuzzers diff --git a/Tests/oss-fuzz/fuzz_pillow.py b/Tests/oss-fuzz/fuzz_pillow.py index 3dd1aea0d22..545daccb680 100644 --- a/Tests/oss-fuzz/fuzz_pillow.py +++ b/Tests/oss-fuzz/fuzz_pillow.py @@ -16,8 +16,10 @@ import atheris + with atheris.instrument_imports(): import sys + import fuzzers From 0dba28613bc94084dc668b924db7e6b5ec944a87 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 31 Aug 2021 00:33:10 +1000 Subject: [PATCH 109/163] Copy Python palette to new image in quantize() --- Tests/test_image_quantize.py | 1 + src/PIL/Image.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Tests/test_image_quantize.py b/Tests/test_image_quantize.py index 1ceff084272..bd9db362c6c 100644 --- a/Tests/test_image_quantize.py +++ b/Tests/test_image_quantize.py @@ -63,6 +63,7 @@ def test_quantize_no_dither(): converted = image.quantize(dither=0, palette=palette) assert_image(converted, "P", converted.size) + assert converted.palette.palette == palette.palette.palette def test_quantize_dither_diff(): diff --git a/src/PIL/Image.py b/src/PIL/Image.py index f53dbe016d3..7dd5b35bd9c 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -1130,7 +1130,9 @@ def quantize(self, colors=256, method=None, kmeans=0, palette=None, dither=1): "only RGB or L mode images can be quantized to a palette" ) im = self.im.convert("P", dither, palette.im) - return self._new(im) + new_im = self._new(im) + new_im.palette = palette.palette.copy() + return new_im im = self._new(self.im.quantize(colors, method, kmeans)) From 9189c4b08bb5b239a708da5280d4ce4e4dad6a77 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 1 Sep 2021 19:46:24 +1000 Subject: [PATCH 110/163] Pillow 8.3.2 supports Python 3.10 [ci skip] --- docs/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 1eb26e4c6dd..03f7157bbe3 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -18,9 +18,9 @@ Pillow supports these Python versions. +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Python |3.10 | 3.9 | 3.8 | 3.7 | 3.6 | 3.5 | 3.4 | 2.7 | +======================+=====+=====+=====+=====+=====+=====+=====+=====+ -| Pillow >= 8.4 | Yes | Yes | Yes | Yes | Yes | | | | +| Pillow >= 8.3.2 | Yes | Yes | Yes | Yes | Yes | | | | +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 8.0 - 8.3 | | Yes | Yes | Yes | Yes | | | | +| Pillow 8.0 - 8.3.1 | | Yes | Yes | Yes | Yes | | | | +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Pillow 7.0 - 7.2 | | | Yes | Yes | Yes | Yes | | | +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ From ad1522aa550257c2b9ea79aa1826e0c6316d12d4 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Wed, 1 Sep 2021 13:14:47 +0300 Subject: [PATCH 111/163] Add release notes for Pillow 8.3.2 --- docs/releasenotes/8.3.2.rst | 27 +++++++++++++++++++++++++++ docs/releasenotes/index.rst | 1 + 2 files changed, 28 insertions(+) create mode 100644 docs/releasenotes/8.3.2.rst diff --git a/docs/releasenotes/8.3.2.rst b/docs/releasenotes/8.3.2.rst new file mode 100644 index 00000000000..0a795957e68 --- /dev/null +++ b/docs/releasenotes/8.3.2.rst @@ -0,0 +1,27 @@ +8.3.2 +----- + +Other Changes +============= + +Python 3.10 wheels +^^^^^^^^^^^^^^^^^^ + +Pillow now includes binary wheels for Python 3.10. + +The Python 3.10 release candidate was released on 2021-08-03 with the final release due +2021-10-04 (:pep:`619`). The CPython core team strongly encourages maintainers of +third-party Python projects to prepare for 3.10 compatibility. And as there are `no ABI +changes`_ planned we are releasing wheels to help others prepare for 3.10, and ensure +Pillow can be used immediately on release day of 3.10.0 final. + +Fixed regressions +^^^^^^^^^^^^^^^^^ + +* Ensure TIFF ``RowsPerStrip`` is multiple of 8 for JPEG compression (:pr:`5588`). + +* Updates for :py:class:`~PIL.ImagePalette` channel order (:pr:`5599`). + +* Hide FriBiDi shim symbols to avoid conflict with real FriBiDi library (:pr:`5651`). + +.. _no ABI changes: https://www.python.org/downloads/release/python-3100rc1/ diff --git a/docs/releasenotes/index.rst b/docs/releasenotes/index.rst index 55c51a4010b..f42ea72e872 100644 --- a/docs/releasenotes/index.rst +++ b/docs/releasenotes/index.rst @@ -15,6 +15,7 @@ expected to be backported to earlier versions. :maxdepth: 2 8.4.0 + 8.3.2 8.3.1 8.3.0 8.2.0 From ec1a00c7fe085bc47ff18f4f78b82e3916dde4af Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Wed, 1 Sep 2021 18:55:54 +0300 Subject: [PATCH 112/163] Add 8.3.2 (2021-09-02) [CI skip] --- CHANGES.rst | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 977323f9f7f..ca4145e9065 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,9 +8,6 @@ Changelog (Pillow) - Determine JPEG2000 mode purely from ihdr header box #5654 [radarhere] -- Updates for ImagePalette channel order #5599 - [radarhere] - - Fixed using info dictionary when writing multiple APNG frames #5611 [radarhere] @@ -68,12 +65,24 @@ Changelog (Pillow) - Fixed ImageOps expand with tuple border on P image #5615 [radarhere] -- Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression #5588 - [kmilos, radarhere] - - Fixed error saving APNG with duplicate frames and different duration times #5609 [thak1411, radarhere] +8.3.2 (2021-09-02) +------------------ + +- Add support for Python 3.10 #5569, #5570 + [hugovk, radarhere] + +- Ensure TIFF ``RowsPerStrip`` is multiple of 8 for JPEG compression #5588 + [kmilos, radarhere] + +- Updates for ``ImagePalette`` channel order #5599 + [radarhere] + +- Hide FriBiDi shim symbols to avoid conflict with real FriBiDi library #5651 + [nulano] + 8.3.1 (2021-07-06) ------------------ From a20d45fc0b7c450ce56f9aaa28eb81e245b8b651 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Sun, 8 Aug 2021 13:54:48 +0200 Subject: [PATCH 113/163] Fix 6-byte OOB read in FliDecode --- src/libImaging/FliDecode.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libImaging/FliDecode.c b/src/libImaging/FliDecode.c index 3a6030703ec..7a396fb1fa5 100644 --- a/src/libImaging/FliDecode.c +++ b/src/libImaging/FliDecode.c @@ -223,8 +223,15 @@ ImagingFliDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t byt break; case 16: /* COPY chunk */ - if (state->xsize > bytes / state->ysize) { + if (INT32_MAX / state->xsize < state->ysize) { + /* Integer overflow, bail */ + state->errcode = IMAGING_CODEC_OVERRUN; + return -1; + } + /* Note, have to check Data + size, not just ptr + size) */ + if (data + (state->xsize * state->ysize) > ptr + bytes) { /* not enough data for frame */ + /* UNDONE Unclear that we're actually going to leave the buffer at the right place. */ return ptr - buf; /* bytes consumed */ } for (y = 0; y < state->ysize; y++) { From d5edc5ff09060281f49dcb49dec2e3ab4d88b07e Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Sun, 8 Aug 2021 14:04:05 +0200 Subject: [PATCH 114/163] FLI tests for Oss-fuzz crash. * Note, valgrind doesn't pick this up, it's only the oss-fuzz reproducer that catches it OMM. --- Tests/images/crash-5762152299364352.fli | Bin 0 -> 8731 bytes Tests/test_file_fli.py | 13 +++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 Tests/images/crash-5762152299364352.fli diff --git a/Tests/images/crash-5762152299364352.fli b/Tests/images/crash-5762152299364352.fli new file mode 100644 index 0000000000000000000000000000000000000000..944fe0b56c73b016c7599beb5b8e47cd33f0432f GIT binary patch literal 8731 zcmeGhe{2)y^_}g@4`aKIaSJo+dW4`dO##PA)8G+^?Zm_^!LIE5d?6(%)mHwLLHc48!QEj&Uk96VA=NgRotsN z3st@w0QmPMlg@I2)eK+(2EgWD3Q%8Xx7E39wvF|*_3JzDbJ^^6L{F{tK9_yH$L@AH zJfA~DO{%~Tqm{X&XYPP=eEYwC)*$72tiig~!?mBDEi&ai`4Ht;69`6HJ3nC*I- z4fL_crrA>qU+vb=I5dJmt^ACOO=j1|O)I@a`Bp*$0K=GRowXfjLYnrO0~uzd30TA$ zU5EC^y*f>L9){KW{s-wzI$eW(KaVFTjS4picl|-1 zI0oUm=J4XLX5YQ84mYeU9L9Zg4!bu=rJRWL$4I+#LaK=8f{pmM`HYB1!eMPRLjdGg zNY{adap8%JoJh~0Kt@RmTx?iTmEy3H=RzUQ z=WThI+t#1rMVXji1Y-ETt^Sr)&euwWcPCE5Gy`T~>}TgMjGZ`fa>MMIAD@hl?4A0< zTmPJVw(-vga(}5NS%LB6~xB6axFaGP_MSl_d&gA5YiOAMH z<##V1KRR{vwXxa1OeCfYyUyMJ0S|!}e;fp0C$u0%P#ICIpeRELK`rH@>Bo6w+w^Vqi&!;ELClKP)dB@g$nRXWRrKMt3vOlYiR2w}xsk_?1S=Ww9v7Q1I>J?jcG2@D*4SC~kS&2370JrQ~6r8V8 zxAgvxXkGR5!zno{WI7vnH162V?b=bu4EYnn6GV>Y^8Nk(Ua^Qr*_a{g7K(g9)B-w# z74Hsf>VE8y6V%jh?)Jf++xMuIo}~H9H5a;P3|?!88@?Y`k0aiMuyM`rFdFyB!0~fiIPx04Q{9I zo|<=ZRF;!x0S;i4cJMiXM=t|>bpYV8*8!eF;WrVVM*J4yF`cG1$*3lzK#yX{QN$4l z5CDu}0~1ylvjcw01B@e*F)~E;I3gLO+Grm|+K>}XGDGJZNFPCb5|Q+e0G;EK$Q9L| z5!IjK=>xp8v6vbWGL1S@l#6Og=7mUiXCt26+eI0f~GrVj1 z(l`-=wc#H*FHLQD@Bw^P&k&#N!`gz_r6X1d41T>c-+ty<`r`ljP$obr7Gj0%Kpd&hD@~9S*14;c&RAaJVa7 z8uXr31F3mf&S3czG}J*a^qQGQFf}md2B!Q0j*KmzX7=EKSW2KW3=Iweli?-{TT@$C zZ(WB8!No!bOlCvq1jfRcO%@YdTT{oHZ5=3VFk3deTG+rNsr8Ld9P`zsvuOdGhe_*=~)OZfp#~6ayNmpcJixMutJhNV)z2c}5L8KJqS2Bqn&N zl1PkU;Kz3z((Yy|oP0saAH09F0TLp literal 0 HcmV?d00001 diff --git a/Tests/test_file_fli.py b/Tests/test_file_fli.py index 1c1abf2b175..675e06bf83c 100644 --- a/Tests/test_file_fli.py +++ b/Tests/test_file_fli.py @@ -138,3 +138,16 @@ def test_timeouts(test_file): with Image.open(f) as im: with pytest.raises(OSError): im.load() + + +@pytest.mark.parametrize( + "test_file", + [ + "Tests/images/crash-5762152299364352.fli", + ], +) +def test_crash(test_file): + with open(test_file, "rb") as f: + with Image.open(f) as im: + with pytest.raises(OSError): + im.load() From 1dc6564eb7ee8f28fb16eeffaf3572f3e1d5aa29 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Mon, 23 Aug 2021 19:10:49 +0300 Subject: [PATCH 115/163] Raise ValueError if color specifier is too long --- Tests/test_imagecolor.py | 9 +++++++++ src/PIL/ImageColor.py | 2 ++ 2 files changed, 11 insertions(+) diff --git a/Tests/test_imagecolor.py b/Tests/test_imagecolor.py index b5d69379655..dbe8b9e957b 100644 --- a/Tests/test_imagecolor.py +++ b/Tests/test_imagecolor.py @@ -191,3 +191,12 @@ def test_rounding_errors(): assert (255, 255) == ImageColor.getcolor("white", "LA") assert (163, 33) == ImageColor.getcolor("rgba(0, 255, 115, 33)", "LA") Image.new("LA", (1, 1), "white") + + +def test_color_too_long(): + # Arrange + color_too_long = "hsl(" + "1" * 100 + ")" + + # Act / Assert + with pytest.raises(ValueError): + ImageColor.getrgb(color_too_long) diff --git a/src/PIL/ImageColor.py b/src/PIL/ImageColor.py index 51df4404039..25f92f2c732 100644 --- a/src/PIL/ImageColor.py +++ b/src/PIL/ImageColor.py @@ -32,6 +32,8 @@ def getrgb(color): :param color: A color string :return: ``(red, green, blue[, alpha])`` """ + if len(color) > 100: + raise ValueError("color specifier is too long") color = color.lower() rgb = colormap.get(color, None) From 5d399603dbec531a6fd68da17cdbe6398a7a54ac Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 24 Aug 2021 16:08:31 +0300 Subject: [PATCH 116/163] Update test case Co-authored-by: Andrew Murray <3112309+radarhere@users.noreply.github.com> --- Tests/test_imagecolor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_imagecolor.py b/Tests/test_imagecolor.py index dbe8b9e957b..dcc44e6e342 100644 --- a/Tests/test_imagecolor.py +++ b/Tests/test_imagecolor.py @@ -195,7 +195,7 @@ def test_rounding_errors(): def test_color_too_long(): # Arrange - color_too_long = "hsl(" + "1" * 100 + ")" + color_too_long = "hsl(" + "1" * 40 + "," + "1" * 40 + "%," + "1" * 40 + "%)" # Act / Assert with pytest.raises(ValueError): From 949503b160b64c5671c690dd42d544ef2b145088 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 2 Sep 2021 15:04:28 +0300 Subject: [PATCH 117/163] Update release notes --- docs/releasenotes/2.7.0.rst | 2 +- docs/releasenotes/8.3.2.rst | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/releasenotes/2.7.0.rst b/docs/releasenotes/2.7.0.rst index 03000528f88..660d331640c 100644 --- a/docs/releasenotes/2.7.0.rst +++ b/docs/releasenotes/2.7.0.rst @@ -14,7 +14,7 @@ Png text chunk size limits To prevent potential denial of service attacks using compressed text chunks, there are now limits to the decompressed size of text chunks decoded from PNG images. If the limits are exceeded when opening a PNG -image a ``ValueError`` will be raised. +image a :py:exc:`ValueError` will be raised. Individual text chunks are limited to :py:attr:`PIL.PngImagePlugin.MAX_TEXT_CHUNK`, set to 1MB by diff --git a/docs/releasenotes/8.3.2.rst b/docs/releasenotes/8.3.2.rst index 0a795957e68..6b5c759fc0a 100644 --- a/docs/releasenotes/8.3.2.rst +++ b/docs/releasenotes/8.3.2.rst @@ -1,6 +1,18 @@ 8.3.2 ----- +Security +======== + +* :cve:`CVE-2021-23437`: Avoid a potential ReDoS (regular expression denial of service) + in :py:class:`~PIL.ImageColor`'s :py:meth:`~PIL.ImageColor.getrgb` by raising + :py:exc:`ValueError` if the color specifier is too long. Present since Pillow 5.2.0. + +* Fix 6-byte out-of-bounds (OOB) read. The previous bounds check in ``FliDecode.c`` + incorrectly calculated the required read buffer size when copying a chunk, potentially + reading six extra bytes off the end of the allocated buffer from the heap. Present + since Pillow 7.1.0. This bug was found by Google's `OSS-Fuzz`_ `CIFuzz`_ runs. + Other Changes ============= @@ -24,4 +36,6 @@ Fixed regressions * Hide FriBiDi shim symbols to avoid conflict with real FriBiDi library (:pr:`5651`). +.. _OSS-Fuzz: https://github.com/google/oss-fuzz +.. _CIFuzz: https://google.github.io/oss-fuzz/getting-started/continuous-integration/ .. _no ABI changes: https://www.python.org/downloads/release/python-3100rc1/ From 98319efcc5460e4d9a2c14e83f8fcdf082754918 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 2 Sep 2021 15:07:13 +0300 Subject: [PATCH 118/163] Update CHANGES.rst --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index ca4145e9065..8d3b9e0d83d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -71,6 +71,12 @@ Changelog (Pillow) 8.3.2 (2021-09-02) ------------------ +- CVE-2021-23437 Raise ValueError if color specifier is too long + [hugovk, radarhere] + +- Fix 6-byte OOB read in FliDecode + [wiredfool] + - Add support for Python 3.10 #5569, #5570 [hugovk, radarhere] From ab90e939b53587bb6ca1e2709c797c0b9178c4e5 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 6 Sep 2021 06:35:43 +1000 Subject: [PATCH 119/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 8d3b9e0d83d..da6c2e36f23 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,12 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Read ICO AND mask from end #5667 + [radarhere] + +- Actually check the framesize in FliDecode.c #5659 + [wiredfool] + - Determine JPEG2000 mode purely from ihdr header box #5654 [radarhere] From 632c11b2abe97bc80af696ace2da0bd8a6d74c74 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 6 Sep 2021 07:36:40 +1000 Subject: [PATCH 120/163] Install numpy on Python 3.10 --- .ci/install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.ci/install.sh b/.ci/install.sh index 0f3a36bc42f..c48acf9eece 100755 --- a/.ci/install.sh +++ b/.ci/install.sh @@ -32,8 +32,7 @@ python3 -m pip install -U pytest-cov python3 -m pip install -U pytest-timeout python3 -m pip install pyroma python3 -m pip install test-image-results -# TODO Remove condition when numpy supports 3.10 -if ! [ "$GHA_PYTHON_VERSION" == "3.10-dev" ]; then python3 -m pip install numpy ; fi +python3 -m pip install numpy # PyQt5 doesn't support PyPy3 if [[ $GHA_PYTHON_VERSION == 3.* ]]; then From ecf3a34717f077045f8f473e17546477fc1f74ad Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 7 Sep 2021 06:30:44 +1000 Subject: [PATCH 121/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index da6c2e36f23..f39612e70b6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Copy Python palette to new image in quantize() #5696 + [radarhere] + - Read ICO AND mask from end #5667 [radarhere] From 75a2ece0d1a436bc18a2301ece11b2b800ca50d4 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 7 Sep 2021 08:25:56 +1000 Subject: [PATCH 122/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index f39612e70b6..3e5c8029f36 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Added "exif" keyword argument to TIFF saving #5575 + [radarhere] + - Copy Python palette to new image in quantize() #5696 [radarhere] From 9509a73ed9080640d8d6b95f514b77329d123fa1 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 7 Sep 2021 17:00:47 +0300 Subject: [PATCH 123/163] Temporarily pin docutils to fix bullets in sphinx_rtd_theme --- requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.txt b/requirements.txt index 38011fd39ef..5f7f01aaeba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,8 @@ black check-manifest coverage defusedxml +# Remove docutils once https://github.com/readthedocs/sphinx_rtd_theme/issues/1115 released +docutils==0.16 markdown2 olefile packaging From df105aa3f7b564e472c491c71eea0473a333e411 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 8 Sep 2021 07:40:58 +1000 Subject: [PATCH 124/163] Updated harfbuzz to 2.9.1 --- winbuild/build_prepare.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index ffffaf66272..361beb4df7b 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -277,9 +277,9 @@ def cmd_msbuild( "libs": [r"*.lib"], }, "harfbuzz": { - "url": "https://github.com/harfbuzz/harfbuzz/archive/2.9.0.zip", - "filename": "harfbuzz-2.9.0.zip", - "dir": "harfbuzz-2.9.0", + "url": "https://github.com/harfbuzz/harfbuzz/archive/2.9.1.zip", + "filename": "harfbuzz-2.9.1.zip", + "dir": "harfbuzz-2.9.1", "build": [ cmd_cmake("-DHB_HAVE_FREETYPE:BOOL=TRUE"), cmd_nmake(target="clean"), From c39e545949ecd2a3cbb81c9bc0813903a3d501ed Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 11 Sep 2021 19:24:24 +1000 Subject: [PATCH 125/163] Updated docstring --- src/PIL/TiffImagePlugin.py | 54 +++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index d1e48ef8175..bd760d35f31 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -437,35 +437,41 @@ class ImageFileDirectory_v2(MutableMapping): Data Structures: - * self.tagtype = {} + * ``self.tagtype = {}`` * Key: numerical tiff tag number * Value: integer corresponding to the data type from - ~PIL.TiffTags.TYPES` + :py:data:`.TiffTags.TYPES` - .. versionadded:: 3.0.0 - """ + .. versionadded:: 3.0.0 - """ - Documentation: - - 'internal' data structures: - * self._tags_v2 = {} Key: numerical tiff tag number - Value: decoded data, as tuple for multiple values - * self._tagdata = {} Key: numerical tiff tag number - Value: undecoded byte string from file - * self._tags_v1 = {} Key: numerical tiff tag number - Value: decoded data in the v1 format - - Tags will be found in the private attributes self._tagdata, and in - self._tags_v2 once decoded. - - self.legacy_api is a value for internal use, and shouldn't be - changed from outside code. In cooperation with the - ImageFileDirectory_v1 class, if legacy_api is true, then decoded - tags will be populated into both _tags_v1 and _tags_v2. _tags_v2 - will be used if this IFD is used in the TIFF save routine. Tags - should be read from _tags_v1 if legacy_api == true. + 'internal' data structures: + + * ``self._tags_v2 = {}`` + + * Key: numerical tiff tag number + * Value: decoded data, as tuple for multiple values + + * ``self._tagdata = {}`` + + * Key: numerical tiff tag number + * Value: undecoded byte string from file + + * ``self._tags_v1 = {}`` + + * Key: numerical tiff tag number + * Value: decoded data in the v1 format + + Tags will be found in the private attributes ``self._tagdata``, and in + ``self._tags_v2`` once decoded. + + ``self.legacy_api`` is a value for internal use, and shouldn't be changed + from outside code. In cooperation with + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api`` + is true, then decoded tags will be populated into both ``_tags_v1`` and + ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF + save routine. Tags should be read from ``_tags_v1`` if + ``legacy_api == true``. """ From 8264aa81d92477b8338616b37165e41ee57accf0 Mon Sep 17 00:00:00 2001 From: Andrew Murray <3112309+radarhere@users.noreply.github.com> Date: Sat, 11 Sep 2021 19:48:43 +1000 Subject: [PATCH 126/163] Updated capitalisation Co-authored-by: Hugo van Kemenade --- src/PIL/TiffImagePlugin.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index bd760d35f31..eb33e321819 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -439,27 +439,27 @@ class ImageFileDirectory_v2(MutableMapping): * ``self.tagtype = {}`` - * Key: numerical tiff tag number + * Key: numerical TIFF tag number * Value: integer corresponding to the data type from :py:data:`.TiffTags.TYPES` .. versionadded:: 3.0.0 - 'internal' data structures: + 'Internal' data structures: * ``self._tags_v2 = {}`` - * Key: numerical tiff tag number + * Key: numerical TIFF tag number * Value: decoded data, as tuple for multiple values * ``self._tagdata = {}`` - * Key: numerical tiff tag number + * Key: numerical TIFF tag number * Value: undecoded byte string from file * ``self._tags_v1 = {}`` - * Key: numerical tiff tag number + * Key: numerical TIFF tag number * Value: decoded data in the v1 format Tags will be found in the private attributes ``self._tagdata``, and in From d72b507a4276eef58beee4ad399bf0684c055c68 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Sun, 5 Sep 2021 23:34:03 +0300 Subject: [PATCH 127/163] Remove unused job --- .github/workflows/test-valgrind.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/workflows/test-valgrind.yml b/.github/workflows/test-valgrind.yml index 7b8474d0fd3..28b1caff5e9 100644 --- a/.github/workflows/test-valgrind.yml +++ b/.github/workflows/test-valgrind.yml @@ -42,11 +42,3 @@ jobs: sudo chown -R 1000 $GITHUB_WORKSPACE docker run --name pillow_container -v $GITHUB_WORKSPACE:/Pillow pythonpillow/${{ matrix.docker }}:${{ matrix.dockerTag }} sudo chown -R runner $GITHUB_WORKSPACE - - success: - needs: build - runs-on: ubuntu-latest - name: Valgrind Test Successful - steps: - - name: Success - run: echo Valgrind Test Successful From 2bd2fbbf0be56a9bad56eef3e64f4f21f002ba2d Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Mon, 6 Sep 2021 15:07:53 +0300 Subject: [PATCH 128/163] Move MinGW to own workflow --- .github/mergify.yml | 1 + .github/workflows/test-mingw.yml | 84 ++++++++++++++++++++++++++++++ .github/workflows/test-windows.yml | 75 +------------------------- 3 files changed, 87 insertions(+), 73 deletions(-) create mode 100644 .github/workflows/test-mingw.yml diff --git a/.github/mergify.yml b/.github/mergify.yml index 4b8b113d3e4..8b289bda671 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -7,6 +7,7 @@ pull_request_rules: - status-success=Test Successful - status-success=Docker Test Successful - status-success=Windows Test Successful + - status-success=MinGW Test Successful - status-success=continuous-integration/appveyor/pr actions: merge: diff --git a/.github/workflows/test-mingw.yml b/.github/workflows/test-mingw.yml new file mode 100644 index 00000000000..982ef2d0899 --- /dev/null +++ b/.github/workflows/test-mingw.yml @@ -0,0 +1,84 @@ +name: Test MinGW + +on: [push, pull_request] + +jobs: + msys: + runs-on: windows-2019 + strategy: + fail-fast: false + matrix: + mingw: ["MINGW32", "MINGW64"] + include: + - mingw: "MINGW32" + name: "MSYS2 MinGW 32-bit" + package: "mingw-w64-i686" + - mingw: "MINGW64" + name: "MSYS2 MinGW 64-bit" + package: "mingw-w64-x86_64" + + defaults: + run: + shell: bash.exe --login -eo pipefail "{0}" + env: + MSYSTEM: ${{ matrix.mingw }} + CHERE_INVOKING: 1 + + timeout-minutes: 30 + name: ${{ matrix.name }} + + steps: + - name: Checkout Pillow + uses: actions/checkout@v2 + + - name: Set up shell + run: echo "C:\msys64\usr\bin\" >> $env:GITHUB_PATH + shell: pwsh + + - name: Install dependencies + run: | + pacman -S --noconfirm \ + ${{ matrix.package }}-python3-cffi \ + ${{ matrix.package }}-python3-numpy \ + ${{ matrix.package }}-python3-olefile \ + ${{ matrix.package }}-python3-pip \ + ${{ matrix.package }}-python3-pyqt5 \ + ${{ matrix.package }}-python3-setuptools \ + ${{ matrix.package }}-freetype \ + ${{ matrix.package }}-ghostscript \ + ${{ matrix.package }}-lcms2 \ + ${{ matrix.package }}-libimagequant \ + ${{ matrix.package }}-libjpeg-turbo \ + ${{ matrix.package }}-libraqm \ + ${{ matrix.package }}-libtiff \ + ${{ matrix.package }}-libwebp \ + ${{ matrix.package }}-openjpeg2 \ + subversion + + python3 -m pip install pyroma pytest pytest-cov + + pushd depends && ./install_extra_test_images.sh && popd + + - name: Build Pillow + run: CFLAGS="-coverage" python3 setup.py build_ext install + + - name: Test Pillow + run: | + python3 selftest.py --installed + python3 -c "from PIL import Image" + python3 -m pytest -vx --cov PIL --cov Tests --cov-report term --cov-report xml Tests + + - name: Upload coverage + run: | + python3 -m pip install codecov + bash <(curl -s https://codecov.io/bash) -F GHA_Windows + env: + CODECOV_NAME: ${{ matrix.name }} + + success: + needs: msys + runs-on: ubuntu-latest + name: MinGW Test Successful + steps: + - name: Success + run: echo MinGW Test Successful diff --git a/.github/workflows/test-windows.yml b/.github/workflows/test-windows.yml index ce04ba5caa3..6ef93b337f7 100644 --- a/.github/workflows/test-windows.yml +++ b/.github/workflows/test-windows.yml @@ -17,6 +17,7 @@ jobs: # PyPy 7.3.4+ only ships 64-bit binaries for Windows - python-version: "pypy-3.7" architecture: "x64" + timeout-minutes: 30 name: Python ${{ matrix.python-version }} ${{ matrix.architecture }} @@ -195,80 +196,8 @@ jobs: name: ${{ steps.wheel.outputs.dist }} path: dist\*.whl - msys: - runs-on: windows-2019 - - strategy: - fail-fast: false - matrix: - mingw: ["MINGW32", "MINGW64"] - include: - - mingw: "MINGW32" - name: "MSYS2 MinGW 32-bit" - package: "mingw-w64-i686" - - mingw: "MINGW64" - name: "MSYS2 MinGW 64-bit" - package: "mingw-w64-x86_64" - - defaults: - run: - shell: bash.exe --login -eo pipefail "{0}" - env: - MSYSTEM: ${{ matrix.mingw }} - CHERE_INVOKING: 1 - - timeout-minutes: 30 - name: ${{ matrix.name }} - - steps: - - uses: actions/checkout@v2 - - - name: Set up shell - run: echo "C:\msys64\usr\bin\" >> $env:GITHUB_PATH - shell: pwsh - - - name: Install Dependencies - run: | - pacman -S --noconfirm \ - ${{ matrix.package }}-python3-cffi \ - ${{ matrix.package }}-python3-numpy \ - ${{ matrix.package }}-python3-olefile \ - ${{ matrix.package }}-python3-pip \ - ${{ matrix.package }}-python3-pyqt5 \ - ${{ matrix.package }}-python3-setuptools \ - ${{ matrix.package }}-freetype \ - ${{ matrix.package }}-ghostscript \ - ${{ matrix.package }}-lcms2 \ - ${{ matrix.package }}-libimagequant \ - ${{ matrix.package }}-libjpeg-turbo \ - ${{ matrix.package }}-libraqm \ - ${{ matrix.package }}-libtiff \ - ${{ matrix.package }}-libwebp \ - ${{ matrix.package }}-openjpeg2 \ - subversion - - python3 -m pip install pyroma pytest pytest-cov - - pushd depends && ./install_extra_test_images.sh && popd - - - name: Build Pillow - run: CFLAGS="-coverage" python3 setup.py build_ext install - - - name: Test Pillow - run: | - python3 selftest.py --installed - python3 -c "from PIL import Image" - python3 -m pytest -vx --cov PIL --cov Tests --cov-report term --cov-report xml Tests - - - name: Upload coverage - run: | - python3 -m pip install codecov - bash <(curl -s https://codecov.io/bash) -F GHA_Windows - env: - CODECOV_NAME: ${{ matrix.name }} - success: - needs: [build, msys] + needs: build runs-on: ubuntu-latest name: Windows Test Successful steps: From a761d9b0c747e8da63048ee2e56a4276e07519e3 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Sun, 12 Sep 2021 10:10:31 +0300 Subject: [PATCH 129/163] Rename to "Build" for consistency Co-authored-by: Andrew Murray <3112309+radarhere@users.noreply.github.com> --- .github/workflows/test-mingw.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-mingw.yml b/.github/workflows/test-mingw.yml index 982ef2d0899..b9d2abeb338 100644 --- a/.github/workflows/test-mingw.yml +++ b/.github/workflows/test-mingw.yml @@ -3,7 +3,7 @@ name: Test MinGW on: [push, pull_request] jobs: - msys: + build: runs-on: windows-2019 strategy: fail-fast: false @@ -76,7 +76,7 @@ jobs: CODECOV_NAME: ${{ matrix.name }} success: - needs: msys + needs: build runs-on: ubuntu-latest name: MinGW Test Successful steps: From 84ee93f7bfec22028581b68c5e899197b24be4f6 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 13 Sep 2021 17:14:59 +1000 Subject: [PATCH 130/163] Moved _info function into docstring --- selftest.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/selftest.py b/selftest.py index 8d77cc5a9e1..4ebd7cc00da 100755 --- a/selftest.py +++ b/selftest.py @@ -14,17 +14,13 @@ pass -def _info(im): - im.load() - return im.format, im.mode, im.size - - def testimage(): """ PIL lets you create in-memory images with various pixel types: >>> from PIL import Image, ImageDraw, ImageFilter, ImageMath >>> im = Image.new("1", (128, 128)) # monochrome + >>> def _info(im): return (im.format, im.mode, im.size) >>> _info(im) (None, '1', (128, 128)) >>> _info(Image.new("L", (128, 128))) # grayscale (luminance) From 21906a8172d6fcd79f8cbd3cc1e9fc0a9c29d71b Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Wed, 15 Sep 2021 16:13:53 +0300 Subject: [PATCH 131/163] Docs: Update CI targets table --- docs/installation.rst | 69 +++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 03f7157bbe3..63984d0ccf0 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -443,41 +443,40 @@ Continuous Integration Targets These platforms are built and tested for every change. -+----------------------------------+---------------------------+---------------------+ -| Operating system | Tested Python versions | Tested architecture | -+==================================+===========================+=====================+ -| Alpine | 3.8 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Arch | 3.8 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Amazon Linux 2 | 3.7 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| CentOS 7 | 3.6 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| CentOS 8 | 3.6 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Debian 10 Buster | 3.7 | x86 | -+----------------------------------+---------------------------+---------------------+ -| Fedora 33 | 3.9 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Fedora 34 | 3.9 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9, PyPy3 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Ubuntu Linux 16.04 LTS (Xenial) | 3.6, 3.7, 3.8, 3.9, PyPy3 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Ubuntu Linux 18.04 LTS (Bionic) | 3.6, 3.7, 3.8, 3.9, PyPy3 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Ubuntu Linux 20.04 LTS (Focal) | 3.8 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Windows Server 2016 | 3.6 | x86-64 | -+----------------------------------+---------------------------+---------------------+ -| Windows Server 2019 | 3.6, 3.7, 3.8, 3.9 | x86, x86-64 | -| +---------------------------+---------------------+ -| | PyPy3 | x86 | -| +---------------------------+---------------------+ -| | 3.9/MinGW | x86, x86-64 | -+----------------------------------+---------------------------+---------------------+ ++----------------------------------+---------------------------------+---------------------+ +| Operating system | Tested Python versions | Tested architecture | ++==================================+=================================+=====================+ +| Alpine | 3.9 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Amazon Linux 2 | 3.7 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Arch | 3.9 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| CentOS 7 | 3.6 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| CentOS 8 | 3.6 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Debian 10 Buster | 3.7 | x86 | ++----------------------------------+---------------------------------+---------------------+ +| Fedora 33 | 3.9 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Fedora 34 | 3.9 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9, 3.10, PyPy3 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Ubuntu Linux 18.04 LTS (Bionic) | 3.6 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Ubuntu Linux 20.04 LTS (Focal) | 3.6, 3.7, 3.8, 3.9, 3.10, PyPy3 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Ubuntu Linux 20.04 LTS (Focal) | 3.8 | arm64v8, ppc64le, | +| | | s390x | ++----------------------------------+---------------------------------+---------------------+ +| Windows Server 2016 | 3.6 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ +| Windows Server 2019 | 3.6, 3.7, 3.8, 3.9, 3.10, PyPy3 | x86, x86-64 | +| +---------------------------------+---------------------+ +| | 3.9/MinGW | x86, x86-64 | ++----------------------------------+---------------------------------+---------------------+ Other Platforms From 9301422d16bf2e020c7e5fcfef67d411153844b8 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 16 Sep 2021 08:25:51 +1000 Subject: [PATCH 132/163] Merged identical cells --- docs/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 63984d0ccf0..426c1e52681 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -467,8 +467,8 @@ These platforms are built and tested for every change. | Ubuntu Linux 18.04 LTS (Bionic) | 3.6 | x86-64 | +----------------------------------+---------------------------------+---------------------+ | Ubuntu Linux 20.04 LTS (Focal) | 3.6, 3.7, 3.8, 3.9, 3.10, PyPy3 | x86-64 | -+----------------------------------+---------------------------------+---------------------+ -| Ubuntu Linux 20.04 LTS (Focal) | 3.8 | arm64v8, ppc64le, | +| +---------------------------------+---------------------+ +| | 3.8 | arm64v8, ppc64le, | | | | s390x | +----------------------------------+---------------------------------+---------------------+ | Windows Server 2016 | 3.6 | x86-64 | From 5b7add9df76724a1534464bf396f9aa63935f595 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 16 Sep 2021 14:40:34 +0300 Subject: [PATCH 133/163] Add CentOS Stream 8 --- .github/workflows/test-docker.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test-docker.yml b/.github/workflows/test-docker.yml index 8274549d4cd..3ce2508de6d 100644 --- a/.github/workflows/test-docker.yml +++ b/.github/workflows/test-docker.yml @@ -20,6 +20,7 @@ jobs: arch, centos-7-amd64, centos-8-amd64, + centos-stream-8-amd64, debian-10-buster-x86, fedora-33-amd64, fedora-34-amd64, From 4cfc9721d292cc78681e5ed57f9e27e2596cd0ea Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 17 Sep 2021 21:26:10 +1000 Subject: [PATCH 134/163] Added CentOS Stream 8 to CI targets --- docs/installation.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/installation.rst b/docs/installation.rst index 426c1e52681..88fac2e586e 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -456,6 +456,8 @@ These platforms are built and tested for every change. +----------------------------------+---------------------------------+---------------------+ | CentOS 8 | 3.6 | x86-64 | +----------------------------------+---------------------------------+---------------------+ +| CentOS Stream 8 | 3.6 | x86-64 | ++----------------------------------+---------------------------------+---------------------+ | Debian 10 Buster | 3.7 | x86 | +----------------------------------+---------------------------------+---------------------+ | Fedora 33 | 3.9 | x86-64 | From 83f6a909d61a5035b601ad1d950762687899ed6f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 17 Sep 2021 21:40:00 +1000 Subject: [PATCH 135/163] Updated macOS tested Pillow versions [ci skip] --- docs/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 426c1e52681..17efb911be7 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -493,9 +493,9 @@ These platforms have been reported to work at the versions mentioned. | Operating system | | Tested Python | | Latest tested | | Tested | | | | versions | | Pillow version | | processors | +==================================+===========================+==================+==============+ -| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.3.1 |arm | +| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.3.2 |arm | | +---------------------------+------------------+--------------+ -| | 3.6, 3.7, 3.8, 3.9 | 8.3.1 |x86-64 | +| | 3.6, 3.7, 3.8, 3.9 | 8.3.2 |x86-64 | +----------------------------------+---------------------------+------------------+--------------+ | macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.3.1 |x86-64 | | +---------------------------+------------------+ | From 58fcc6edeee367f956397ad2372414f916527d22 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 18 Sep 2021 08:19:11 +1000 Subject: [PATCH 136/163] Updated harfbuzz to 3.0.0 --- winbuild/build_prepare.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index 361beb4df7b..e10e3756f14 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -277,9 +277,9 @@ def cmd_msbuild( "libs": [r"*.lib"], }, "harfbuzz": { - "url": "https://github.com/harfbuzz/harfbuzz/archive/2.9.1.zip", - "filename": "harfbuzz-2.9.1.zip", - "dir": "harfbuzz-2.9.1", + "url": "https://github.com/harfbuzz/harfbuzz/archive/3.0.0.zip", + "filename": "harfbuzz-3.0.0.zip", + "dir": "harfbuzz-3.0.0", "build": [ cmd_cmake("-DHB_HAVE_FREETYPE:BOOL=TRUE"), cmd_nmake(target="clean"), From 8fd843bf16f8534626f75708115077baaf4d5de0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ondrej=20Baranovi=C4=8D?= Date: Sat, 18 Sep 2021 22:57:43 +0200 Subject: [PATCH 137/163] Delete raqm.cmake --- winbuild/raqm.cmake | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 winbuild/raqm.cmake diff --git a/winbuild/raqm.cmake b/winbuild/raqm.cmake deleted file mode 100644 index 82c9cdc7038..00000000000 --- a/winbuild/raqm.cmake +++ /dev/null @@ -1,39 +0,0 @@ -cmake_minimum_required(VERSION 3.12) - -project(libraqm) - - -find_library(fribidi NAMES fribidi) -find_library(harfbuzz NAMES harfbuzz) -find_library(freetype NAMES freetype) - -add_definitions(-DFRIBIDI_LIB_STATIC) - - -function(raqm_conf) - file(READ configure.ac RAQM_CONF) - string(REGEX MATCH "\\[([0-9]+)\\.([0-9]+)\\.([0-9]+)\\]," _ "${RAQM_CONF}") - set(RAQM_VERSION_MAJOR "${CMAKE_MATCH_1}") - set(RAQM_VERSION_MINOR "${CMAKE_MATCH_2}") - set(RAQM_VERSION_MICRO "${CMAKE_MATCH_3}") - set(RAQM_VERSION "${RAQM_VERSION_MAJOR}.${RAQM_VERSION_MINOR}.${RAQM_VERSION_MICRO}") - message("detected libraqm version ${RAQM_VERSION}") - configure_file(src/raqm-version.h.in src/raqm-version.h @ONLY) -endfunction() -raqm_conf() - - -set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) -set(RAQM_SOURCES - src/raqm.c) -set(RAQM_HEADERS - src/raqm.h - src/raqm-version.h) - -add_library(libraqm SHARED - ${RAQM_SOURCES} - ${RAQM_HEADERS}) -target_link_libraries(libraqm - ${fribidi} - ${harfbuzz} - ${freetype}) From 2205f6050e4183b1ecc3f05e7f30efd827ca7853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ondrej=20Baranovi=C4=8D?= Date: Sat, 18 Sep 2021 23:00:39 +0200 Subject: [PATCH 138/163] document --no-fribidi option --- winbuild/build.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/winbuild/build.rst b/winbuild/build.rst index 7493c30e5e8..b30a94226d7 100644 --- a/winbuild/build.rst +++ b/winbuild/build.rst @@ -55,8 +55,8 @@ behaviour of ``build_prepare.py``: * ``-v`` will print generated scripts. * ``--no-imagequant`` will skip GPL-licensed ``libimagequant`` optional dependency -* ``--no-raqm`` will skip optional dependency Raqm (which itself depends on - LGPL-licensed ``fribidi``). +* ``--no-fribidi`` or ``--no-raqm`` will skip optional LGPL-licensed dependency FriBiDi + (required for Raqm text shaping). * ``--python=`` and ``--executable=`` override ``PYTHON`` and ``EXECUTABLE``. * ``--architecture=`` overrides ``ARCHITECTURE``. * ``--dir=`` and ``--depends=`` override ``PILLOW_BUILD`` From c1db69cc3f245d0565c4a39556ab4574d2c61dd5 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 20 Sep 2021 22:16:37 +1000 Subject: [PATCH 139/163] Renamed register_open accept method for consistency --- docs/example/DdsImagePlugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/example/DdsImagePlugin.py b/docs/example/DdsImagePlugin.py index 78aa3ce7295..272409416cc 100644 --- a/docs/example/DdsImagePlugin.py +++ b/docs/example/DdsImagePlugin.py @@ -269,9 +269,9 @@ def decode(self, buffer): Image.register_decoder("DXT5", DXT5Decoder) -def _validate(prefix): +def _accept(prefix): return prefix[:4] == b"DDS " -Image.register_open(DdsImageFile.format, DdsImageFile, _validate) +Image.register_open(DdsImageFile.format, DdsImageFile, _accept) Image.register_extension(DdsImageFile.format, ".dds") From 312ed69c0196e2fbeaa9a7856e9e34e41c1e4b0c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 20 Sep 2021 22:17:06 +1000 Subject: [PATCH 140/163] Commented unused method --- src/PIL/MpoImagePlugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PIL/MpoImagePlugin.py b/src/PIL/MpoImagePlugin.py index 7244aa2a908..707ce182c34 100644 --- a/src/PIL/MpoImagePlugin.py +++ b/src/PIL/MpoImagePlugin.py @@ -22,8 +22,8 @@ from ._binary import i16be as i16 -def _accept(prefix): - return JpegImagePlugin._accept(prefix) +# def _accept(prefix): +# return JpegImagePlugin._accept(prefix) def _save(im, fp, filename): From 99428bb878ac1cd8a61a5089ca43741d918c4ffb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 20 Sep 2021 12:22:07 +0000 Subject: [PATCH 141/163] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/PIL/MpoImagePlugin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/PIL/MpoImagePlugin.py b/src/PIL/MpoImagePlugin.py index 707ce182c34..7ccf27c420b 100644 --- a/src/PIL/MpoImagePlugin.py +++ b/src/PIL/MpoImagePlugin.py @@ -21,7 +21,6 @@ from . import Image, ImageFile, JpegImagePlugin from ._binary import i16be as i16 - # def _accept(prefix): # return JpegImagePlugin._accept(prefix) From 836e6d98a3ce7cded8942d485ecf35010d996694 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 21 Sep 2021 07:46:37 +1000 Subject: [PATCH 142/163] Updated libimagequant to 2.16.0 --- depends/install_imagequant.sh | 2 +- docs/installation.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/depends/install_imagequant.sh b/depends/install_imagequant.sh index c6c7506a396..38f0e75d6f8 100755 --- a/depends/install_imagequant.sh +++ b/depends/install_imagequant.sh @@ -1,7 +1,7 @@ #!/bin/bash # install libimagequant -archive=libimagequant-2.15.1 +archive=libimagequant-2.16.0 ./download-and-extract.sh $archive https://raw.githubusercontent.com/python-pillow/pillow-depends/master/$archive.tar.gz diff --git a/docs/installation.rst b/docs/installation.rst index 9d384e65b56..f795111e863 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -185,7 +185,7 @@ Many of Pillow's features require external libraries: * **libimagequant** provides improved color quantization - * Pillow has been tested with libimagequant **2.6-2.15.1** + * Pillow has been tested with libimagequant **2.6-2.16.0** * Libimagequant is licensed GPLv3, which is more restrictive than the Pillow license, therefore we will not be distributing binaries with libimagequant support enabled. From 52fa7aefb59a37eb0db7dc8ddef2f53b018abe60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ondrej=20Baranovi=C4=8D?= Date: Tue, 21 Sep 2021 03:37:58 +0200 Subject: [PATCH 143/163] update winbuild imagequant to 2.16.0 --- winbuild/build_prepare.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index e10e3756f14..64bea70e857 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -257,10 +257,10 @@ def cmd_msbuild( "libs": [r"bin\*.lib"], }, "libimagequant": { - # Merge master into msvc (matches 2.14.1 except for version bump) - "url": "https://github.com/ImageOptim/libimagequant/archive/16adaded22d1f90db5c9154a06d00a8b672ca09a.zip", # noqa: E501 - "filename": "libimagequant-16adaded22d1f90db5c9154a06d00a8b672ca09a.zip", - "dir": "libimagequant-16adaded22d1f90db5c9154a06d00a8b672ca09a", + # commit: Merge branch 'master' into msvc (matches 2.16.0 tag) + "url": "https://github.com/ImageOptim/libimagequant/archive/f41ee301ff3a407b16991af3dbe03910919bbdc3.zip", # noqa: E501 + "filename": "libimagequant-f41ee301ff3a407b16991af3dbe03910919bbdc3.zip", + "dir": "libimagequant-f41ee301ff3a407b16991af3dbe03910919bbdc3", "patch": { "CMakeLists.txt": { "add_library": "add_compile_options(-openmp-)\r\nadd_library", From aa27c4d96b80b51fefddc6d4d4fda27bd885c710 Mon Sep 17 00:00:00 2001 From: nulano Date: Tue, 21 Sep 2021 04:49:35 +0200 Subject: [PATCH 144/163] update imagequant patches --- winbuild/build_prepare.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index 64bea70e857..5f26439850b 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -263,18 +263,19 @@ def cmd_msbuild( "dir": "libimagequant-f41ee301ff3a407b16991af3dbe03910919bbdc3", "patch": { "CMakeLists.txt": { - "add_library": "add_compile_options(-openmp-)\r\nadd_library", - " SHARED": " STATIC", + "if(OPENMP_FOUND)": "if(false)", + "install": "#install", } }, "build": [ # lint: do not inline cmd_cmake(), cmd_nmake(target="clean"), - cmd_nmake(), + cmd_nmake(target="imagequant_a"), + cmd_copy("imagequant_a.lib", "imagequant.lib"), ], "headers": [r"*.h"], - "libs": [r"*.lib"], + "libs": [r"imagequant.lib"], }, "harfbuzz": { "url": "https://github.com/harfbuzz/harfbuzz/archive/3.0.0.zip", @@ -437,6 +438,7 @@ def build_dep(name): assert patch_from in text text = text.replace(patch_from, patch_to) with open(patch_file, "w") as f: + print(f"Patching {patch_file}") f.write(text) banner = f"Building {name} ({dir})" From 3fdb2190d251db0934d4513cf1f873cc4c87a37f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 24 Sep 2021 08:36:57 +1000 Subject: [PATCH 145/163] Updated fribidi to 1.0.11 --- winbuild/build_prepare.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index 5f26439850b..807cbbf275a 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -290,9 +290,9 @@ def cmd_msbuild( "libs": [r"*.lib"], }, "fribidi": { - "url": "https://github.com/fribidi/fribidi/archive/v1.0.10.zip", - "filename": "fribidi-1.0.10.zip", - "dir": "fribidi-1.0.10", + "url": "https://github.com/fribidi/fribidi/archive/v1.0.11.zip", + "filename": "fribidi-1.0.11.zip", + "dir": "fribidi-1.0.11", "build": [ cmd_copy(r"{winbuild_dir}\fribidi.cmake", r"CMakeLists.txt"), cmd_cmake(), From a80f8133d623fa371e23cb35799a009f4cbe1bdc Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 27 Sep 2021 23:19:05 +1000 Subject: [PATCH 146/163] Updated Ghostscript to 9.55.0 --- .appveyor.yml | 4 ++-- .github/workflows/test-windows.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 0cf1d5a9e80..93140b89cde 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -24,8 +24,8 @@ install: - mv c:\pillow-depends-master c:\pillow-depends - xcopy /S /Y c:\pillow-depends\test_images\* c:\pillow\tests\images - 7z x ..\pillow-depends\nasm-2.15.05-win64.zip -oc:\ -- ..\pillow-depends\gs9540w32.exe /S -- path c:\nasm-2.15.05;C:\Program Files (x86)\gs\gs9.54.0\bin;%PATH% +- ..\pillow-depends\gs9550w32.exe /S +- path c:\nasm-2.15.05;C:\Program Files (x86)\gs\gs9.55.0\bin;%PATH% - cd c:\pillow\winbuild\ - ps: | c:\python37\python.exe c:\pillow\winbuild\build_prepare.py -v --depends=C:\pillow-depends\ diff --git a/.github/workflows/test-windows.yml b/.github/workflows/test-windows.yml index 6ef93b337f7..e2a1e8cd4c7 100644 --- a/.github/workflows/test-windows.yml +++ b/.github/workflows/test-windows.yml @@ -61,8 +61,8 @@ jobs: 7z x winbuild\depends\nasm-2.15.05-win64.zip "-o$env:RUNNER_WORKSPACE\" echo "$env:RUNNER_WORKSPACE\nasm-2.15.05" >> $env:GITHUB_PATH - winbuild\depends\gs9540w32.exe /S - echo "C:\Program Files (x86)\gs\gs9.54.0\bin" >> $env:GITHUB_PATH + winbuild\depends\gs9550w32.exe /S + echo "C:\Program Files (x86)\gs\gs9.55.0\bin" >> $env:GITHUB_PATH xcopy /S /Y winbuild\depends\test_images\* Tests\images\ From aeb3c810d05730251ebfeaceccc88b0b77108b71 Mon Sep 17 00:00:00 2001 From: nulano Date: Mon, 27 Sep 2021 22:37:55 +0200 Subject: [PATCH 147/163] upgrade vendored raqm to 0.7.2 --- src/thirdparty/raqm/NEWS | 14 ++++++++ src/thirdparty/raqm/{README => README.md} | 22 ++++++------ src/thirdparty/raqm/raqm-version.h | 4 +-- src/thirdparty/raqm/raqm.c | 33 ++++++++++++++++-- src/thirdparty/raqm/raqm.h | 42 +++++++++++++---------- 5 files changed, 80 insertions(+), 35 deletions(-) rename src/thirdparty/raqm/{README => README.md} (79%) diff --git a/src/thirdparty/raqm/NEWS b/src/thirdparty/raqm/NEWS index 29c9ae0e5a5..c49176a95bf 100644 --- a/src/thirdparty/raqm/NEWS +++ b/src/thirdparty/raqm/NEWS @@ -1,3 +1,17 @@ +Overview of changes leading to 0.7.1 +Monday, September 27, 2021 +==================================== + +Fix test failure with newer HarfBuzz versions. + +Apply FT_Face transformation matrix when built against FreeType 2.11 or later. + +Add meson build system. Autotools build system will be dropped in next release. + +Improve MSVC support. + +Build and documentation fixes. + Overview of changes leading to 0.7.1 Sunday, November 22, 2020 ==================================== diff --git a/src/thirdparty/raqm/README b/src/thirdparty/raqm/README.md similarity index 79% rename from src/thirdparty/raqm/README rename to src/thirdparty/raqm/README.md index 7940bf3b660..64937343a6f 100644 --- a/src/thirdparty/raqm/README +++ b/src/thirdparty/raqm/README.md @@ -1,8 +1,7 @@ Raqm ==== -[![Linux & macOS build](https://travis-ci.org/HOST-Oman/libraqm.svg?branch=master)](https://travis-ci.org/HOST-Oman/libraqm) -[![Windows build](https://img.shields.io/appveyor/ci/HOSTOman/libraqm/master.svg)](https://ci.appveyor.com/project/HOSTOman/libraqm) +[![Build](https://github.com/HOST-Oman/libraqm/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/HOST-Oman/libraqm/actions) Raqm is a small library that encapsulates the logic for complex text layout and provides a convenient API. @@ -15,7 +14,7 @@ The documentation can be accessed on the web at: > http://host-oman.github.io/libraqm/ Raqm (Arabic: رَقْم) is writing, also number or digit and the Arabic word for -digital (رَقَمِيّ) shares the same root, so it is a play on “digital writing”. +digital (رَقَمِيّ) shares the same root, so it is a play on “digital writing”. Building -------- @@ -30,31 +29,30 @@ To build the documentation you will also need: To install dependencies on Fedora: - sudo dnf install freetype-devel harfbuzz-devel fribidi-devel gtk-doc + sudo dnf install freetype-devel harfbuzz-devel fribidi-devel meson gtk-doc To install dependencies on Ubuntu: - sudo apt-get install libfreetype6-dev libharfbuzz-dev libfribidi-dev \ - gtk-doc-tools + sudo apt-get install libfreetype6-dev libharfbuzz-dev libfribidi-dev meson gtk-doc-tools On Mac OS X you can use Homebrew: - brew install freetype harfbuzz fribidi gtk-doc + brew install freetype harfbuzz fribidi meson gtk-doc export XML_CATALOG_FILES="/usr/local/etc/xml/catalog" # for the docs Once you have the source code and the dependencies, you can proceed to build. To do that, run the customary sequence of commands in the source code directory: - $ ./configure - $ make - $ make install + $ meson build + $ ninja -C build + $ ninja -C build install -To build the documentation, pass `--enable-gtk-doc` to the `configure` script. +To build the documentation, pass `-Ddocs=enable` to the `meson`. To run the tests: - $ make check + $ ninja -C test Contributing ------------ diff --git a/src/thirdparty/raqm/raqm-version.h b/src/thirdparty/raqm/raqm-version.h index 94b25ada7e8..8b115f612c6 100644 --- a/src/thirdparty/raqm/raqm-version.h +++ b/src/thirdparty/raqm/raqm-version.h @@ -33,9 +33,9 @@ #define RAQM_VERSION_MAJOR 0 #define RAQM_VERSION_MINOR 7 -#define RAQM_VERSION_MICRO 1 +#define RAQM_VERSION_MICRO 2 -#define RAQM_VERSION_STRING "0.7.1" +#define RAQM_VERSION_STRING "0.7.2" #define RAQM_VERSION_ATLEAST(major,minor,micro) \ ((major)*10000+(minor)*100+(micro) <= \ diff --git a/src/thirdparty/raqm/raqm.c b/src/thirdparty/raqm/raqm.c index 9f6be676c53..f396a545c7c 100644 --- a/src/thirdparty/raqm/raqm.c +++ b/src/thirdparty/raqm/raqm.c @@ -455,8 +455,6 @@ raqm_set_text_utf8 (raqm_t *rq, return true; } - RAQM_TEST ("Text is: %s\n", text); - rq->flags |= RAQM_FLAG_UTF8; rq->text_utf8 = malloc (sizeof (char) * len); @@ -1556,6 +1554,21 @@ _raqm_resolve_scripts (raqm_t *rq) return true; } +static void +_raqm_ft_transform (int *x, + int *y, + FT_Matrix matrix) +{ + FT_Vector vector; + vector.x = *x; + vector.y = *y; + + FT_Vector_Transform (&vector, &matrix); + + *x = vector.x; + *y = vector.y; +} + static bool _raqm_shape (raqm_t *rq) { @@ -1585,6 +1598,22 @@ _raqm_shape (raqm_t *rq) hb_shape_full (run->font, run->buffer, rq->features, rq->features_len, NULL); + +#ifdef HAVE_FT_GET_TRANSFORM + { + FT_Matrix matrix; + hb_glyph_position_t *pos; + unsigned int len; + + FT_Get_Transform (hb_ft_font_get_face (run->font), &matrix, NULL); + pos = hb_buffer_get_glyph_positions (run->buffer, &len); + for (unsigned int i = 0; i < len; i++) + { + _raqm_ft_transform (&pos[i].x_advance, &pos[i].y_advance, matrix); + _raqm_ft_transform (&pos[i].x_offset, &pos[i].y_offset, matrix); + } + } +#endif } return true; diff --git a/src/thirdparty/raqm/raqm.h b/src/thirdparty/raqm/raqm.h index 1a33fe8bad2..342afc8b29b 100644 --- a/src/thirdparty/raqm/raqm.h +++ b/src/thirdparty/raqm/raqm.h @@ -30,6 +30,10 @@ #include "config.h" #endif +#ifndef RAQM_API +#define RAQM_API +#endif + #include #include #include @@ -93,86 +97,86 @@ typedef struct raqm_glyph_t { FT_Face ftface; } raqm_glyph_t; -raqm_t * +RAQM_API raqm_t * raqm_create (void); -raqm_t * +RAQM_API raqm_t * raqm_reference (raqm_t *rq); -void +RAQM_API void raqm_destroy (raqm_t *rq); -bool +RAQM_API bool raqm_set_text (raqm_t *rq, const uint32_t *text, size_t len); -bool +RAQM_API bool raqm_set_text_utf8 (raqm_t *rq, const char *text, size_t len); -bool +RAQM_API bool raqm_set_par_direction (raqm_t *rq, raqm_direction_t dir); -bool +RAQM_API bool raqm_set_language (raqm_t *rq, const char *lang, size_t start, size_t len); -bool +RAQM_API bool raqm_add_font_feature (raqm_t *rq, const char *feature, int len); -bool +RAQM_API bool raqm_set_freetype_face (raqm_t *rq, FT_Face face); -bool +RAQM_API bool raqm_set_freetype_face_range (raqm_t *rq, FT_Face face, size_t start, size_t len); -bool +RAQM_API bool raqm_set_freetype_load_flags (raqm_t *rq, int flags); -bool +RAQM_API bool raqm_set_invisible_glyph (raqm_t *rq, int gid); -bool +RAQM_API bool raqm_layout (raqm_t *rq); -raqm_glyph_t * +RAQM_API raqm_glyph_t * raqm_get_glyphs (raqm_t *rq, size_t *length); -bool +RAQM_API bool raqm_index_to_position (raqm_t *rq, size_t *index, int *x, int *y); -bool +RAQM_API bool raqm_position_to_index (raqm_t *rq, int x, int y, size_t *index); -void +RAQM_API void raqm_version (unsigned int *major, unsigned int *minor, unsigned int *micro); -const char * +RAQM_API const char * raqm_version_string (void); -bool +RAQM_API bool raqm_version_atleast (unsigned int major, unsigned int minor, unsigned int micro); From 6565d13275cead21dc6f369204f0dc3d0b43bc18 Mon Sep 17 00:00:00 2001 From: nulano Date: Mon, 27 Sep 2021 22:50:30 +0200 Subject: [PATCH 148/163] detect FreeType / HarfBuzz features --- src/thirdparty/raqm/raqm.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/thirdparty/raqm/raqm.c b/src/thirdparty/raqm/raqm.c index f396a545c7c..31161c9d91d 100644 --- a/src/thirdparty/raqm/raqm.c +++ b/src/thirdparty/raqm/raqm.c @@ -39,6 +39,21 @@ #include #include +#if FREETYPE_MAJOR > 2 || \ + FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 11 +#define HAVE_FT_GET_TRANSFORM +#endif + +#if HB_VERSION_ATLEAST(2, 0, 0) +#define HAVE_HB_BUFFER_SET_INVISIBLE_GLYPH +#endif + +#if HB_VERSION_ATLEAST(1, 8, 0) +#define HAVE_DECL_HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES 1 +#else +#define HAVE_DECL_HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES 0 +#endif + #include "raqm.h" #if FRIBIDI_MAJOR_VERSION >= 1 From 5b7fb4f9607b75ef3e1e5bdb898fc2e0bb210d72 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 28 Sep 2021 11:44:47 +1000 Subject: [PATCH 149/163] Updated macOS tested Pillow versions [ci skip] --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index f795111e863..3b0ff96d6b9 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -499,7 +499,7 @@ These platforms have been reported to work at the versions mentioned. | +---------------------------+------------------+--------------+ | | 3.6, 3.7, 3.8, 3.9 | 8.3.2 |x86-64 | +----------------------------------+---------------------------+------------------+--------------+ -| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.3.1 |x86-64 | +| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.3.2 |x86-64 | | +---------------------------+------------------+ | | | 3.5 | 7.2.0 | | +----------------------------------+---------------------------+------------------+--------------+ From 63879f04b119551a3d562dd2da24464e199b9ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= <4973094+kmilos@users.noreply.github.com> Date: Fri, 1 Oct 2021 13:50:02 +0200 Subject: [PATCH 150/163] Make TIFF strip size configurable --- src/PIL/TiffImagePlugin.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index eb33e321819..ab9ccd1cdd5 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -58,6 +58,7 @@ READ_LIBTIFF = False WRITE_LIBTIFF = False IFD_LEGACY_API = True +STRIP_SIZE = 65536 II = b"II" # little-endian (Intel style) MM = b"MM" # big-endian (Motorola style) @@ -1617,9 +1618,9 @@ def _save(im, fp, filename): ifd[COLORMAP] = tuple(v * 256 for v in lut) # data orientation stride = len(bits) * ((im.size[0] * bits[0] + 7) // 8) - # aim for 64 KB strips when using libtiff writer + # aim for given strip size (64 KB by default) when using libtiff writer if libtiff: - rows_per_strip = min((2 ** 16 + stride - 1) // stride, im.size[1]) + rows_per_strip = min(STRIP_SIZE // stride, im.size[1]) # JPEG encoder expects multiple of 8 rows if compression == "jpeg": rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, im.size[1]) From 515314b85c2da6b53a48df9c78452450faba8a4a Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 2 Oct 2021 09:50:27 +1000 Subject: [PATCH 151/163] Updated capitalization --- src/PIL/ImageShow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PIL/ImageShow.py b/src/PIL/ImageShow.py index c3693eb61f4..60c97542f56 100644 --- a/src/PIL/ImageShow.py +++ b/src/PIL/ImageShow.py @@ -133,7 +133,7 @@ def get_command(self, file, **options): class MacViewer(Viewer): - """The default viewer on MacOS using ``Preview.app``.""" + """The default viewer on macOS using ``Preview.app``.""" format = "PNG" options = {"compress_level": 1} From 448de228d26b040a9f0b2a2d862ca55ba752656e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 16:54:25 +0000 Subject: [PATCH 152/163] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: e3000ace2fd1fcb1c181bb7a8285f1f976bcbdc7 → 911470a610e47d9da5ea938b0887c3df62819b85](https://github.com/psf/black/compare/e3000ace2fd1fcb1c181bb7a8285f1f976bcbdc7...911470a610e47d9da5ea938b0887c3df62819b85) - https://gitlab.com/pycqa/flake8 → https://github.com/PyCQA/flake8 --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 55fe9c4a758..4a0256085b0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black - rev: e3000ace2fd1fcb1c181bb7a8285f1f976bcbdc7 # frozen: 21.7b0 + rev: 911470a610e47d9da5ea938b0887c3df62819b85 # frozen: 21.9b0 hooks: - id: black args: ["--target-version", "py36"] @@ -24,7 +24,7 @@ repos: - id: remove-tabs exclude: (Makefile$|\.bat$|\.cmake$|\.eps$|\.fits$|\.opt$) - - repo: https://gitlab.com/pycqa/flake8 + - repo: https://github.com/PyCQA/flake8 rev: dcd740bc0ebaf2b3d43e59a0060d157c97de13f3 # frozen: 3.9.2 hooks: - id: flake8 From 8eb3c9791ddb94fd3a2ae08ff44aa82f04b0c2e3 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Tue, 5 Oct 2021 11:54:12 +0300 Subject: [PATCH 153/163] Test Python 3.10.0 final on GitHub Actions --- .github/workflows/test-windows.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-windows.yml b/.github/workflows/test-windows.yml index e2a1e8cd4c7..431d2828595 100644 --- a/.github/workflows/test-windows.yml +++ b/.github/workflows/test-windows.yml @@ -8,7 +8,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.6", "3.7", "3.8", "3.9", "3.10-dev"] + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] architecture: ["x86", "x64"] include: # PyPy3.6 only ships 32-bit binaries for Windows diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cd85bc53764..53ecbb32b3f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: python-version: [ "pypy-3.7", "pypy-3.6", - "3.10-dev", + "3.10", "3.9", "3.8", "3.7", From 8de429ecb9ca4e18df237ea4071a9066ff3d147d Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 8 Oct 2021 13:12:21 +1100 Subject: [PATCH 154/163] Fixed Python errors when saving a (0, 0) TIFF image --- Tests/test_file_libtiff.py | 7 +++++++ src/PIL/TiffImagePlugin.py | 8 ++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 1d0c93f06aa..fc1831d99df 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -986,3 +986,10 @@ def test_save_multistrip(self, compression, tmp_path): with Image.open(out) as im: # Assert that there are multiple strips assert len(im.tag_v2[STRIPOFFSETS]) > 1 + + @pytest.mark.parametrize("compression", ("tiff_adobe_deflate", None)) + def test_save_zero(self, compression, tmp_path): + im = Image.new("RGB", (0, 0)) + out = str(tmp_path / "temp.tif") + with pytest.raises(SystemError): + im.save(out, compression=compression) diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index eb33e321819..baaa709d8b1 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1619,13 +1619,17 @@ def _save(im, fp, filename): stride = len(bits) * ((im.size[0] * bits[0] + 7) // 8) # aim for 64 KB strips when using libtiff writer if libtiff: - rows_per_strip = min((2 ** 16 + stride - 1) // stride, im.size[1]) + rows_per_strip = ( + 1 if stride == 0 else min((2 ** 16 + stride - 1) // stride, im.size[1]) + ) # JPEG encoder expects multiple of 8 rows if compression == "jpeg": rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, im.size[1]) else: rows_per_strip = im.size[1] - strip_byte_counts = stride * rows_per_strip + if rows_per_strip == 0: + rows_per_strip = 1 + strip_byte_counts = 1 if stride == 0 else stride * rows_per_strip strips_per_image = (im.size[1] + rows_per_strip - 1) // rows_per_strip ifd[ROWSPERSTRIP] = rows_per_strip if strip_byte_counts >= 2 ** 16: From 174b4893f3a6d092b4766d43ac570f0e57ecd718 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 12 Oct 2021 09:45:52 +1100 Subject: [PATCH 155/163] Prefer global transparency for disposal method 2 --- Tests/images/dispose_bgnd_transparency.gif | Bin 0 -> 5616 bytes Tests/test_file_gif.py | 7 +++++++ src/PIL/GifImagePlugin.py | 8 +++----- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 Tests/images/dispose_bgnd_transparency.gif diff --git a/Tests/images/dispose_bgnd_transparency.gif b/Tests/images/dispose_bgnd_transparency.gif new file mode 100644 index 0000000000000000000000000000000000000000..7c626fe72c0b521e9f5becc70c52231a4e235930 GIT binary patch literal 5616 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 Date: Wed, 13 Oct 2021 09:40:18 +1100 Subject: [PATCH 156/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 3e5c8029f36..23fb5de5952 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Prefer global transparency in GIF when replacing with background color #5756 + [radarhere] + - Added "exif" keyword argument to TIFF saving #5575 [radarhere] From b5d6a73da9533ed5510383a6302fa1f17bdfe4a4 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 8 Oct 2021 12:53:53 +1100 Subject: [PATCH 157/163] Added test --- Tests/test_file_libtiff.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 1d0c93f06aa..ebc8e5e0762 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -986,3 +986,16 @@ def test_save_multistrip(self, compression, tmp_path): with Image.open(out) as im: # Assert that there are multiple strips assert len(im.tag_v2[STRIPOFFSETS]) > 1 + + def test_save_single_strip(self, tmp_path): + im = hopper("RGB").resize((256, 256)) + out = str(tmp_path / "temp.tif") + + TiffImagePlugin.STRIP_SIZE = 2 ** 18 + im.save(out, compression="tiff_adobe_deflate") + + try: + with Image.open(out) as im: + assert len(im.tag_v2[STRIPOFFSETS]) == 1 + finally: + TiffImagePlugin.STRIP_SIZE = 65536 From 1140f6538d03ef0b481773edcc0f8c90f992c7f1 Mon Sep 17 00:00:00 2001 From: Andrew Murray <3112309+radarhere@users.noreply.github.com> Date: Thu, 14 Oct 2021 08:09:36 +1100 Subject: [PATCH 158/163] Ensure reset after test failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondrej Baranovič --- Tests/test_file_libtiff.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index 2c12efb8184..aed1cabc2b1 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -992,9 +992,10 @@ def test_save_single_strip(self, tmp_path): out = str(tmp_path / "temp.tif") TiffImagePlugin.STRIP_SIZE = 2 ** 18 - im.save(out, compression="tiff_adobe_deflate") - try: + + im.save(out, compression="tiff_adobe_deflate") + with Image.open(out) as im: assert len(im.tag_v2[STRIPOFFSETS]) == 1 finally: From dbb0a41600ee26faa00d3eaacb6eb37b078493eb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 13 Oct 2021 21:10:19 +0000 Subject: [PATCH 159/163] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- Tests/test_file_libtiff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index aed1cabc2b1..6ac90f7789d 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -993,7 +993,7 @@ def test_save_single_strip(self, tmp_path): TiffImagePlugin.STRIP_SIZE = 2 ** 18 try: - + im.save(out, compression="tiff_adobe_deflate") with Image.open(out) as im: From 19f4c6fd233a03d0b43ccbb7b0c45e23de6ed38c Mon Sep 17 00:00:00 2001 From: nulano Date: Thu, 14 Oct 2021 06:46:27 +0100 Subject: [PATCH 160/163] don't use bitmap glyphs when drawing text with stroker --- Tests/images/bitmap_font_stroke_basic.png | Bin 0 -> 2676 bytes Tests/images/bitmap_font_stroke_raqm.png | Bin 0 -> 2655 bytes Tests/test_imagefont.py | 16 ++++++++++++++++ src/_imagingft.c | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 Tests/images/bitmap_font_stroke_basic.png create mode 100644 Tests/images/bitmap_font_stroke_raqm.png diff --git a/Tests/images/bitmap_font_stroke_basic.png b/Tests/images/bitmap_font_stroke_basic.png new file mode 100644 index 0000000000000000000000000000000000000000..86b2d09f66e4a0b385c7e53210df882e1d4409a9 GIT binary patch literal 2676 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 Date: Thu, 14 Oct 2021 13:42:18 -0400 Subject: [PATCH 161/163] Create tidelift.yml --- .github/workflows/tidelift.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/tidelift.yml diff --git a/.github/workflows/tidelift.yml b/.github/workflows/tidelift.yml new file mode 100644 index 00000000000..af6f01b1c2b --- /dev/null +++ b/.github/workflows/tidelift.yml @@ -0,0 +1,16 @@ +name: Tidelift Align +on: [push] + +jobs: + build: + name: Run Tidelift to ensure approved open source packages are in use + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Scan + uses: tidelift/scan-action@main + env: + TIDELIFT_API_KEY: ${{ secrets.TIDELIFT_API_KEY }} + TIDELIFT_ORGANIZATION: ${{ secrets.TIDELIFT_ORGANIZATION }} + TIDELIFT_PROJECT: ${{ secrets.TIDELIFT_PROJECT }} From ce3c925a517f2a85c2dafbae79903980a3a2c5ba Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Thu, 14 Oct 2021 22:46:42 +0300 Subject: [PATCH 162/163] Delete tidelift.yml --- .github/workflows/tidelift.yml | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 .github/workflows/tidelift.yml diff --git a/.github/workflows/tidelift.yml b/.github/workflows/tidelift.yml deleted file mode 100644 index af6f01b1c2b..00000000000 --- a/.github/workflows/tidelift.yml +++ /dev/null @@ -1,16 +0,0 @@ -name: Tidelift Align -on: [push] - -jobs: - build: - name: Run Tidelift to ensure approved open source packages are in use - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Scan - uses: tidelift/scan-action@main - env: - TIDELIFT_API_KEY: ${{ secrets.TIDELIFT_API_KEY }} - TIDELIFT_ORGANIZATION: ${{ secrets.TIDELIFT_ORGANIZATION }} - TIDELIFT_PROJECT: ${{ secrets.TIDELIFT_PROJECT }} From 40e7ff622669550733b26f14dc817fb72e096250 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Fri, 15 Oct 2021 09:27:22 +0300 Subject: [PATCH 163/163] 8.4.0 version bump --- CHANGES.rst | 2 +- src/PIL/_version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 23fb5de5952..934c634aa45 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,7 +2,7 @@ Changelog (Pillow) ================== -8.4.0 (unreleased) +8.4.0 (2021-10-15) ------------------ - Prefer global transparency in GIF when replacing with background color #5756 diff --git a/src/PIL/_version.py b/src/PIL/_version.py index 31f5daa4779..d7f0f7ea130 100644 --- a/src/PIL/_version.py +++ b/src/PIL/_version.py @@ -1,2 +1,2 @@ # Master version for Pillow -__version__ = "8.4.0.dev0" +__version__ = "8.4.0"

7ItG> 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 onNRuV2#XJc5KM~UX*8l(j literal 0 HcmV?d00001 diff --git a/Tests/test_imageops.py b/Tests/test_imageops.py index dc20d432f65..f7e6c68bfdd 100644 --- a/Tests/test_imageops.py +++ b/Tests/test_imageops.py @@ -335,6 +335,28 @@ def check(orientation_im): ) as orientation_im: check(orientation_im) + # Orientation from "XML:com.adobe.xmp" info key + with Image.open("Tests/images/xmp_tags_orientation.png") as im: + assert im.getexif()[0x0112] == 3 + + transposed_im = ImageOps.exif_transpose(im) + assert 0x0112 not in transposed_im.getexif() + + # Orientation from "Raw profile type exif" info key + # This test image has been manually hexedited from exif_imagemagick.png + # to have a different orientation + with Image.open("Tests/images/exif_imagemagick_orientation.png") as im: + assert im.getexif()[0x0112] == 3 + + transposed_im = ImageOps.exif_transpose(im) + assert 0x0112 not in transposed_im.getexif() + + # Orientation set directly on Image.Exif + im = hopper() + im.getexif()[0x0112] = 3 + transposed_im = ImageOps.exif_transpose(im) + assert 0x0112 not in transposed_im.getexif() + def test_autocontrast_cutoff(): # Test the cutoff argument of autocontrast diff --git a/src/PIL/ImageOps.py b/src/PIL/ImageOps.py index 711a519fcdb..e06a7eaca2a 100644 --- a/src/PIL/ImageOps.py +++ b/src/PIL/ImageOps.py @@ -19,6 +19,7 @@ import functools import operator +import re from . import Image, ImageDraw @@ -588,7 +589,19 @@ def exif_transpose(image): if method is not None: transposed_image = image.transpose(method) transposed_exif = transposed_image.getexif() - del transposed_exif[0x0112] - transposed_image.info["exif"] = transposed_exif.tobytes() + if 0x0112 in transposed_exif: + del transposed_exif[0x0112] + if "exif" in transposed_image.info: + transposed_image.info["exif"] = transposed_exif.tobytes() + elif "Raw profile type exif" in transposed_image.info: + transposed_image.info[ + "Raw profile type exif" + ] = transposed_exif.tobytes().hex() + elif "XML:com.adobe.xmp" in transposed_image.info: + transposed_image.info["XML:com.adobe.xmp"] = re.sub( + r'tiff:Orientation="([0-9])"', + "", + transposed_image.info["XML:com.adobe.xmp"], + ) return transposed_image return image.copy() From f962b18f6972b9aeeaa0ab1a00ea87c46408da6c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 6 Jul 2021 11:00:03 +1000 Subject: [PATCH 017/163] Catch OSError when checking if fp is sys.stdout --- src/PIL/ImageFile.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/PIL/ImageFile.py b/src/PIL/ImageFile.py index daf732de155..43d2bf0cc1a 100644 --- a/src/PIL/ImageFile.py +++ b/src/PIL/ImageFile.py @@ -493,7 +493,11 @@ def _save(im, fp, tile, bufsize=0): # But, it would need at least the image size in most cases. RawEncode is # a tricky case. bufsize = max(MAXBLOCK, bufsize, im.size[0] * 4) # see RawEncode.c - if fp == sys.stdout or (hasattr(sys.stdout, "buffer") and fp == sys.stdout.buffer): + try: + stdout = fp == sys.stdout or fp == sys.stdout.buffer + except (OSError, AttributeError): + stdout = False + if stdout: fp.flush() return try: From b6111065de63851ddfd6e5ab832a0b79c45b4df4 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 6 Jul 2021 17:57:16 +1000 Subject: [PATCH 018/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 7c820e17af4..63adb87822d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,6 +2,18 @@ Changelog (Pillow) ================== +8.3.1 (2021-07-06) +------------------ + +- Catch OSError when checking if fp is sys.stdout #5585 + [radarhere] + +- Handle removing orientation from alternate types of EXIF data #5584 + [radarhere] + +- Make Image.__array__ take optional dtype argument #5572 + [t-vi, radarhere] + 8.3.0 (2021-07-01) ------------------ From 5fe583598fd7a96514abec669b1bf5f7676aeb57 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 7 Jul 2021 00:03:45 +1000 Subject: [PATCH 019/163] Added release notes for 8.3.1 --- docs/releasenotes/8.3.1.rst | 40 +++++++++++++++++++++++++++++++++++++ docs/releasenotes/index.rst | 1 + 2 files changed, 41 insertions(+) create mode 100644 docs/releasenotes/8.3.1.rst diff --git a/docs/releasenotes/8.3.1.rst b/docs/releasenotes/8.3.1.rst new file mode 100644 index 00000000000..e97070c111c --- /dev/null +++ b/docs/releasenotes/8.3.1.rst @@ -0,0 +1,40 @@ +8.3.1 +----- + +Fixed regression converting to NumPy arrays +=========================================== + +This fixes a regression introduced in 8.3.0 when converting an image to a NumPy array +with a ``dtype`` argument. + +.. code-block:: pycon + + >>> from PIL import Image + >>> import numpy + >>> im = Image.new("RGB", (100, 100)) + >>> numpy.array(im, dtype=numpy.float64) + Traceback (most recent call last): + File "", line 1, in + TypeError: __array__() takes 1 positional argument but 2 were given + >>> + +Catch OSError when checking if destination is sys.stdout +======================================================== + +In 8.3.0, a check to see if the destination was ``sys.stdout`` when saving an image was +updated. This lead to an OSError being raised if the environment restricted access. + +The OSError is now silently caught. + +Fixed removing orientation in ImageOps.exif_transpose +===================================================== + +In 8.3.0, :py:meth:`~PIL.ImageOps.exif_transpose` was changed to ensure that the +original image EXIF data was not modified, and the orientation was only removed from +the modified copy. + +However, for certain images the orientation was already missing from the modified +image, leading to a KeyError. + +This error has been resolved, and the copying of metadata to the modified image +improved. diff --git a/docs/releasenotes/index.rst b/docs/releasenotes/index.rst index 3e23e43d3a1..e60d26ec7da 100644 --- a/docs/releasenotes/index.rst +++ b/docs/releasenotes/index.rst @@ -14,6 +14,7 @@ expected to be backported to earlier versions. .. toctree:: :maxdepth: 2 + 8.3.1 8.3.0 8.2.0 8.1.2 From 01e423da00c7039e447a477c21a7414a2ccae5e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= <4973094+kmilos@users.noreply.github.com> Date: Wed, 7 Jul 2021 09:38:06 +0200 Subject: [PATCH 020/163] Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression --- src/PIL/TiffImagePlugin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index a5e2bb53d17..3f34cc9acac 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1577,6 +1577,9 @@ def _save(im, fp, filename): # aim for 64 KB strips when using libtiff writer if libtiff: rows_per_strip = min((2 ** 16 + stride - 1) // stride, im.size[1]) + # JPEG encoder expects multiple of 8 rows + if compression == "jpeg": + rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, im.size[1]) else: rows_per_strip = im.size[1] strip_byte_counts = stride * rows_per_strip From abb192c9b39595839e4fcf227d43c80abf7032d1 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 7 Jul 2021 19:16:44 +1000 Subject: [PATCH 021/163] Added test --- Tests/test_file_libtiff.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index e2f0df84a8c..8de4f0784f2 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -968,10 +968,11 @@ def test_realloc_overflow(self): assert str(e.value) == "-9" TiffImagePlugin.READ_LIBTIFF = False - def test_save_multistrip(self, tmp_path): + @pytest.mark.parametrize("compression", ("tiff_adobe_deflate", "jpeg")) + def test_save_multistrip(self, compression, tmp_path): im = hopper("RGB").resize((256, 256)) out = str(tmp_path / "temp.tif") - im.save(out, compression="tiff_adobe_deflate") + im.save(out, compression=compression) with Image.open(out) as im: # Assert that there are multiple strips From fdfa9e8521a0b9436a6324f652c323a2e3a0b21e Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 8 Jul 2021 17:08:11 +1000 Subject: [PATCH 022/163] If default conversion from P is RGB with transparency, convert to RGBA --- Tests/test_image_convert.py | 12 ++++++++---- src/PIL/Image.py | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Tests/test_image_convert.py b/Tests/test_image_convert.py index 5dcdac0e4e1..b8c20b943e5 100644 --- a/Tests/test_image_convert.py +++ b/Tests/test_image_convert.py @@ -42,10 +42,14 @@ def test_default(): im = hopper("P") assert_image(im, "P", im.size) - im = im.convert() - assert_image(im, "RGB", im.size) - im = im.convert() - assert_image(im, "RGB", im.size) + converted_im = im.convert() + assert_image(converted_im, "RGB", im.size) + converted_im = im.convert() + assert_image(converted_im, "RGB", im.size) + + im.info["transparency"] = 0 + converted_im = im.convert() + assert_image(converted_im, "RGBA", im.size) # ref https://github.com/python-pillow/Pillow/issues/274 diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 124ca392b07..c70d37cf32e 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -914,16 +914,18 @@ def convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256): self.load() + has_transparency = self.info.get("transparency") is not None if not mode and self.mode == "P": # determine default mode if self.palette: mode = self.palette.mode else: mode = "RGB" + if mode == "RGB" and has_transparency: + mode = "RGBA" if not mode or (mode == self.mode and not matrix): return self.copy() - has_transparency = self.info.get("transparency") is not None if matrix: # matrix conversion if mode not in ("L", "RGB"): From 4c76ed03a798bd1289f7e9bb4b86f6e5ded08729 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 9 Jul 2021 10:08:29 +1000 Subject: [PATCH 023/163] Updated harfbuzz to 2.8.2 --- winbuild/build_prepare.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/winbuild/build_prepare.py b/winbuild/build_prepare.py index 63270d753f7..a9ca8dd6cc9 100644 --- a/winbuild/build_prepare.py +++ b/winbuild/build_prepare.py @@ -277,9 +277,9 @@ def cmd_msbuild( "libs": [r"*.lib"], }, "harfbuzz": { - "url": "https://github.com/harfbuzz/harfbuzz/archive/2.8.1.zip", - "filename": "harfbuzz-2.8.1.zip", - "dir": "harfbuzz-2.8.1", + "url": "https://github.com/harfbuzz/harfbuzz/archive/2.8.2.zip", + "filename": "harfbuzz-2.8.2.zip", + "dir": "harfbuzz-2.8.2", "build": [ cmd_cmake("-DHB_HAVE_FREETYPE:BOOL=TRUE"), cmd_nmake(target="clean"), From a39cb04f3e1e464c4cba1a34f57ebe35188bcdff Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 9 Jul 2021 21:23:43 +1000 Subject: [PATCH 024/163] Consider I;16 pixel size when drawing text --- Tests/test_imagefont.py | 11 +++++++++++ src/libImaging/Paste.c | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py index 892bd0ed1f5..002641faa85 100644 --- a/Tests/test_imagefont.py +++ b/Tests/test_imagefont.py @@ -134,6 +134,17 @@ def test_transparent_background(self): target = "Tests/images/transparent_background_text_L.png" assert_image_similar_tofile(im.convert("L"), target, 0.01) + def test_I16(self): + im = Image.new(mode="I;16", size=(300, 100)) + draw = ImageDraw.Draw(im) + ttf = self.get_font() + + txt = "Hello World!" + draw.text((10, 10), txt, font=ttf) + + target = "Tests/images/transparent_background_text_L.png" + assert_image_similar_tofile(im.convert("L"), target, 0.01) + def test_textsize_equal(self): im = Image.new(mode="RGB", size=(300, 100)) draw = ImageDraw.Draw(im) diff --git a/src/libImaging/Paste.c b/src/libImaging/Paste.c index a1bf18a9291..be26cd260b9 100644 --- a/src/libImaging/Paste.c +++ b/src/libImaging/Paste.c @@ -417,9 +417,16 @@ fill_mask_L( if (imOut->image8) { for (y = 0; y < ysize; y++) { UINT8 *out = imOut->image8[y + dy] + dx; + if (strncmp(imOut->mode, "I;16", 4) == 0) { + out += dx; + } UINT8 *mask = imMask->image8[y + sy] + sx; for (x = 0; x < xsize; x++) { *out = BLEND(*mask, *out, ink[0], tmp1); + if (strncmp(imOut->mode, "I;16", 4) == 0) { + out++; + *out = BLEND(*mask, *out, ink[0], tmp1); + } out++, mask++; } } From 5cdcc2cf64c096b55320e89bc0eaec51caa56fdf Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 10 Jul 2021 01:20:36 +1000 Subject: [PATCH 025/163] Added tags when saving YCbCr TIFF --- Tests/test_file_libtiff.py | 9 +++++++++ src/PIL/TiffImagePlugin.py | 8 ++++++++ src/encode.c | 6 ++++++ 3 files changed, 23 insertions(+) diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index e2f0df84a8c..de18b83d048 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -670,6 +670,15 @@ def save_bytesio(compression=None): TiffImagePlugin.WRITE_LIBTIFF = False TiffImagePlugin.READ_LIBTIFF = False + def test_save_ycbcr(self, tmp_path): + im = hopper("YCbCr") + outfile = str(tmp_path / "temp.tif") + im.save(outfile, compression="jpeg") + + with Image.open(outfile) as reloaded: + assert reloaded.tag_v2[530] == (1, 1) + assert reloaded.tag_v2[532] == (0, 255, 128, 255, 128, 255) + def test_crashing_metadata(self, tmp_path): # issue 1597 with Image.open("Tests/images/rdf.tif") as im: diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index a5e2bb53d17..2e1be52ad10 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -93,6 +93,7 @@ EXTRASAMPLES = 338 SAMPLEFORMAT = 339 JPEGTABLES = 347 +YCBCRSUBSAMPLING = 530 REFERENCEBLACKWHITE = 532 COPYRIGHT = 33432 IPTC_NAA_CHUNK = 33723 # newsphoto properties @@ -1593,6 +1594,13 @@ def _save(im, fp, filename): # no compression by default: ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1) + if im.mode == "YCbCr": + for tag, value in { + YCBCRSUBSAMPLING: (1, 1), + REFERENCEBLACKWHITE: (0, 255, 128, 255, 128, 255), + }.items(): + ifd.setdefault(tag, value) + if libtiff: if "quality" in im.encoderinfo: quality = im.encoderinfo["quality"] diff --git a/src/encode.c b/src/encode.c index daa806ff420..5933e79a5b7 100644 --- a/src/encode.c +++ b/src/encode.c @@ -808,6 +808,12 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { av + stride * 2); free(av); } + } else if (key_int == TIFFTAG_YCBCRSUBSAMPLING) { + status = ImagingLibTiffSetField( + &encoder->state, + (ttag_t)key_int, + (UINT16)PyLong_AsLong(PyTuple_GetItem(value, 0)), + (UINT16)PyLong_AsLong(PyTuple_GetItem(value, 1))); } else if (type == TIFF_SHORT) { UINT16 *av; /* malloc check ok, calloc checks for overflow */ From b45fdd081722f8cb9f53563399ddde108c2d0c5f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 10 Jul 2021 15:15:10 +1000 Subject: [PATCH 026/163] Allow saving WebP with icc_profile None --- Tests/test_file_webp.py | 7 +++++++ src/PIL/WebPImagePlugin.py | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Tests/test_file_webp.py b/Tests/test_file_webp.py index 7fdb32ef41b..420594b0cb2 100644 --- a/Tests/test_file_webp.py +++ b/Tests/test_file_webp.py @@ -104,6 +104,13 @@ def test_write_method(self, tmp_path): hopper().save(buffer_method, format="WEBP", method=6) assert buffer_no_args.getbuffer() != buffer_method.getbuffer() + def test_icc_profile(self, tmp_path): + self._roundtrip(tmp_path, self.rgb_mode, 12.5, {"icc_profile": None}) + if _webp.HAVE_WEBPANIM: + self._roundtrip( + tmp_path, self.rgb_mode, 12.5, {"icc_profile": None, "save_all": True} + ) + def test_write_unsupported_mode_L(self, tmp_path): """ Saving a black-and-white file to WebP format should work, and be diff --git a/src/PIL/WebPImagePlugin.py b/src/PIL/WebPImagePlugin.py index b63a07ca8e3..590161f3ecc 100644 --- a/src/PIL/WebPImagePlugin.py +++ b/src/PIL/WebPImagePlugin.py @@ -202,7 +202,7 @@ def _save_all(im, fp, filename): lossless = im.encoderinfo.get("lossless", False) quality = im.encoderinfo.get("quality", 80) method = im.encoderinfo.get("method", 0) - icc_profile = im.encoderinfo.get("icc_profile", "") + icc_profile = im.encoderinfo.get("icc_profile") or "" exif = im.encoderinfo.get("exif", "") if isinstance(exif, Image.Exif): exif = exif.tobytes() @@ -309,7 +309,7 @@ def _save_all(im, fp, filename): def _save(im, fp, filename): lossless = im.encoderinfo.get("lossless", False) quality = im.encoderinfo.get("quality", 80) - icc_profile = im.encoderinfo.get("icc_profile", "") + icc_profile = im.encoderinfo.get("icc_profile") or "" exif = im.encoderinfo.get("exif", "") if isinstance(exif, Image.Exif): exif = exif.tobytes() From 43ea81c6db0bd359db1c4b87c3593c0825ce5f3a Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 11 Jul 2021 22:52:32 +1000 Subject: [PATCH 027/163] For save_all with palette, do not include palette with each frame --- Tests/test_file_gif.py | 23 +++++++++++++++++++++++ src/PIL/GifImagePlugin.py | 26 ++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 2632ab7c04f..56da68d6000 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -821,6 +821,29 @@ def test_palette_save_P(tmp_path): assert_image_equal(reloaded, im) +def test_palette_save_all_P(tmp_path): + frames = [] + colors = ((255, 0, 0), (0, 255, 0)) + for color in colors: + frame = Image.new("P", (100, 100)) + frame.putpalette(color) + frames.append(frame) + + out = str(tmp_path / "temp.gif") + frames[0].save( + out, save_all=True, palette=[255, 0, 0, 0, 255, 0], append_images=frames[1:] + ) + + with Image.open(out) as im: + # Assert that the frames are correct, and each frame has the same palette + assert_image_equal(im.convert("RGB"), frames[0].convert("RGB")) + assert im.palette.palette == im.global_palette.palette + + im.seek(1) + assert_image_equal(im.convert("RGB"), frames[1].convert("RGB")) + assert im.palette.palette == im.global_palette.palette + + def test_palette_save_ImagePalette(tmp_path): # Pass in a different palette, as an ImagePalette.ImagePalette # effectively the same as test_palette_save_P diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 5db31080958..c5aca2a6ab0 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -414,9 +414,26 @@ def _normalize_palette(im, palette, info): source_palette = bytearray(i // 3 for i in range(768)) im.palette = ImagePalette.ImagePalette("RGB", palette=source_palette) - used_palette_colors = _get_optimize(im, info) - if used_palette_colors is not None: - return im.remap_palette(used_palette_colors, source_palette) + if palette: + used_palette_colors = [] + for i in range(0, len(source_palette), 3): + source_color = tuple(source_palette[i : i + 3]) + try: + index = im.palette.colors[source_color] + except KeyError: + index = None + used_palette_colors.append(index) + for i, index in enumerate(used_palette_colors): + if index is None: + for j in range(len(used_palette_colors)): + if j not in used_palette_colors: + used_palette_colors[i] = j + break + im = im.remap_palette(used_palette_colors) + else: + used_palette_colors = _get_optimize(im, info) + if used_palette_colors is not None: + return im.remap_palette(used_palette_colors, source_palette) im.palette.palette = source_palette return im @@ -507,7 +524,8 @@ def _write_multiple_frames(im, fp, palette): offset = (0, 0) else: # compress difference - frame_data["encoderinfo"]["include_color_table"] = True + if not palette: + frame_data["encoderinfo"]["include_color_table"] = True im_frame = im_frame.crop(frame_data["bbox"]) offset = frame_data["bbox"][:2] From 622a1cd5427ff1f2742fedd6775a92911aa603dc Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 12 Jul 2021 21:00:36 +1000 Subject: [PATCH 028/163] Changed URLs to HTTPS --- docs/reference/c_extension_debugging.rst | 4 ++-- src/PIL/GifImagePlugin.py | 2 +- src/PIL/ImageCms.py | 2 +- src/PIL/MspImagePlugin.py | 4 ++-- src/Tk/_tkmini.h | 2 +- src/libImaging/ImagingUtils.h | 2 +- src/thirdparty/raqm/raqm.c | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/reference/c_extension_debugging.rst b/docs/reference/c_extension_debugging.rst index 527b9d7bc83..66175ea0cde 100644 --- a/docs/reference/c_extension_debugging.rst +++ b/docs/reference/c_extension_debugging.rst @@ -339,7 +339,7 @@ Take your test image, and make a really simple harness. (vpy38-dbg) ubuntu@primary:~/Home/tests$ gdb python GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2 Copyright (C) 2020 Free Software Foundation, Inc. - License GPLv3+: GNU GPL version 3 or later + License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. @@ -348,7 +348,7 @@ Take your test image, and make a really simple harness. For bug reporting instructions, please see: . Find the GDB manual and other documentation resources online at: - . + . For help, type "help". Type "apropos word" to search for commands related to "word"... diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 5db31080958..fe57e24e277 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -787,7 +787,7 @@ def _get_global_header(im, info): """Return a list of strings representing a GIF header""" # Header Block - # http://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp + # https://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp version = b"87a" for extensionKey in ["transparency", "duration", "loop", "comment"]: diff --git a/src/PIL/ImageCms.py b/src/PIL/ImageCms.py index 8c4740ddcb1..3699095901d 100644 --- a/src/PIL/ImageCms.py +++ b/src/PIL/ImageCms.py @@ -37,7 +37,7 @@ http://www.cazabon.com pyCMS home page: http://www.cazabon.com/pyCMS - littleCMS home page: http://www.littlecms.com + littleCMS home page: https://www.littlecms.com (littleCMS is Copyright (C) 1998-2001 Marti Maria) Originally released under LGPL. Graciously donated to PIL in diff --git a/src/PIL/MspImagePlugin.py b/src/PIL/MspImagePlugin.py index e1fdc1fdf75..32b28d44d5f 100644 --- a/src/PIL/MspImagePlugin.py +++ b/src/PIL/MspImagePlugin.py @@ -21,7 +21,7 @@ # Figure 205. Windows Paint Version 1: "DanM" Format # Figure 206. Windows Paint Version 2: "LinS" Format. Used in Windows V2.03 # -# See also: http://www.fileformat.info/format/mspaint/egff.htm +# See also: https://www.fileformat.info/format/mspaint/egff.htm import io import struct @@ -73,7 +73,7 @@ def _open(self): class MspDecoder(ImageFile.PyDecoder): # The algo for the MSP decoder is from - # http://www.fileformat.info/format/mspaint/egff.htm + # https://www.fileformat.info/format/mspaint/egff.htm # cc-by-attribution -- That page references is taken from the # Encyclopedia of Graphics File Formats and is licensed by # O'Reilly under the Creative Common/Attribution license diff --git a/src/Tk/_tkmini.h b/src/Tk/_tkmini.h index b6945eb1ab3..9852fc9d688 100644 --- a/src/Tk/_tkmini.h +++ b/src/Tk/_tkmini.h @@ -1,7 +1,7 @@ /* Small excerpts from the Tcl / Tk 8.6 headers * * License terms copied from: - * http://www.tcl.tk/software/tcltk/license.html + * https://www.tcl.tk/software/tcltk/license.html * as of 20 May 2016. * * Copyright (c) 1987-1994 The Regents of the University of California. diff --git a/src/libImaging/ImagingUtils.h b/src/libImaging/ImagingUtils.h index ad6f280ac90..0c0c1eda917 100644 --- a/src/libImaging/ImagingUtils.h +++ b/src/libImaging/ImagingUtils.h @@ -29,7 +29,7 @@ /* This is to work around a bug in GCC prior 4.9 in 64 bit mode. GCC generates code with partial dependency which is 3 times slower. - See: http://stackoverflow.com/a/26588074/253146 */ + See: https://stackoverflow.com/a/26588074/253146 */ #if defined(__x86_64__) && defined(__SSE__) && !defined(__NO_INLINE__) && \ !defined(__clang__) && defined(GCC_VERSION) && (GCC_VERSION < 40900) static float __attribute__((always_inline)) inline _i2f(int v) { diff --git a/src/thirdparty/raqm/raqm.c b/src/thirdparty/raqm/raqm.c index 5a0b2078eae..9f6be676c53 100644 --- a/src/thirdparty/raqm/raqm.c +++ b/src/thirdparty/raqm/raqm.c @@ -491,7 +491,7 @@ raqm_set_text_utf8 (raqm_t *rq, * * The default is #RAQM_DIRECTION_DEFAULT, which determines the paragraph * direction based on the first character with strong bidi type (see [rule - * P2](http://unicode.org/reports/tr9/#P2) in Unicode Bidirectional Algorithm), + * P2](https://unicode.org/reports/tr9/#P2) in Unicode Bidirectional Algorithm), * which can be good enough for many cases but has problems when a mainly * right-to-left paragraph starts with a left-to-right character and vice versa * as the detected paragraph direction will be the wrong one, or when text does From 97e0cb85ee43e647e834e7adbe30b0b1bcb98963 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 12 Jul 2021 22:55:12 +1000 Subject: [PATCH 029/163] Keep transparency when converting from P to LA or PA --- Tests/test_image_convert.py | 14 +++++++++----- src/PIL/Image.py | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Tests/test_image_convert.py b/Tests/test_image_convert.py index 5dcdac0e4e1..9795de72ba1 100644 --- a/Tests/test_image_convert.py +++ b/Tests/test_image_convert.py @@ -100,18 +100,22 @@ def test_trns_p(tmp_path): # ref https://github.com/python-pillow/Pillow/issues/664 -def test_trns_p_rgba(): +@pytest.mark.parametrize("mode", ("LA", "PA", "RGBA")) +def test_trns_p_transparency(mode): # Arrange im = hopper("P") im.info["transparency"] = 128 # Act - im_rgba = im.convert("RGBA") + converted_im = im.convert(mode) # Assert - assert "transparency" not in im_rgba.info - # https://github.com/python-pillow/Pillow/issues/2702 - assert im_rgba.palette is None + assert "transparency" not in converted_im.info + if mode == "PA": + assert converted_im.palette is not None + else: + # https://github.com/python-pillow/Pillow/issues/2702 + assert converted_im.palette is None def test_trns_l(tmp_path): diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 124ca392b07..622c4350097 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -1005,7 +1005,7 @@ def convert_transparency(m, v): trns_im = trns_im.convert("RGB") trns = trns_im.getpixel((0, 0)) - elif self.mode == "P" and mode == "RGBA": + elif self.mode == "P" and mode in ("LA", "PA", "RGBA"): t = self.info["transparency"] delete_trns = True From 45aec957172e111ee6e721e0edd00a58e92448e3 Mon Sep 17 00:00:00 2001 From: thak1411 Date: Tue, 13 Jul 2021 12:07:36 +0900 Subject: [PATCH 030/163] Fixed round error in saving apng file --- src/PIL/PngImagePlugin.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py index bd886e2184c..cd679d2c3ca 100644 --- a/src/PIL/PngImagePlugin.py +++ b/src/PIL/PngImagePlugin.py @@ -1117,12 +1117,12 @@ def _write_multiple_frames(im, fp, chunk, rawmode): and prev_disposal == encoderinfo.get("disposal") and prev_blend == encoderinfo.get("blend") ): - duration = encoderinfo.get("duration", 0) - if duration: + now_duration = encoderinfo.get("duration", 0) + if now_duration: if "duration" in previous["encoderinfo"]: - previous["encoderinfo"]["duration"] += duration + previous["encoderinfo"]["duration"] += now_duration else: - previous["encoderinfo"]["duration"] = duration + previous["encoderinfo"]["duration"] = now_duration continue else: bbox = None From 0521ac71e096eeca0c37ce772a5a3275c023b1fd Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 13 Jul 2021 18:43:56 +1000 Subject: [PATCH 031/163] Renamed variable --- src/PIL/PngImagePlugin.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py index cd679d2c3ca..a91393726d6 100644 --- a/src/PIL/PngImagePlugin.py +++ b/src/PIL/PngImagePlugin.py @@ -1117,12 +1117,12 @@ def _write_multiple_frames(im, fp, chunk, rawmode): and prev_disposal == encoderinfo.get("disposal") and prev_blend == encoderinfo.get("blend") ): - now_duration = encoderinfo.get("duration", 0) - if now_duration: + frame_duration = encoderinfo.get("duration", 0) + if frame_duration: if "duration" in previous["encoderinfo"]: - previous["encoderinfo"]["duration"] += now_duration + previous["encoderinfo"]["duration"] += frame_duration else: - previous["encoderinfo"]["duration"] = now_duration + previous["encoderinfo"]["duration"] = frame_duration continue else: bbox = None From ca16cf2aacd5a84c7819dcdbba3cc6a46649b83d Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 13 Jul 2021 18:47:55 +1000 Subject: [PATCH 032/163] Added test --- Tests/test_file_apng.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Tests/test_file_apng.py b/Tests/test_file_apng.py index 7fb6f59d493..15e007ca131 100644 --- a/Tests/test_file_apng.py +++ b/Tests/test_file_apng.py @@ -433,7 +433,9 @@ def test_apng_save_duration_loop(tmp_path): # test removal of duplicated frames frame = Image.new("RGBA", (128, 64), (255, 0, 0, 255)) - frame.save(test_file, save_all=True, append_images=[frame], duration=[500, 250]) + frame.save( + test_file, save_all=True, append_images=[frame, frame], duration=[500, 100, 150] + ) with Image.open(test_file) as im: im.load() assert im.n_frames == 1 From 696b82e44032500197734c4dc4669d7c3f8b9371 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 13 Jul 2021 21:25:59 +1000 Subject: [PATCH 033/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 63adb87822d..4fc55104b31 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,6 +2,12 @@ Changelog (Pillow) ================== +8.4.0 (unreleased) +------------------ + +- Fixed error saving APNG with duplicate frames and different duration times #5609 + [thak1411, radarhere] + 8.3.1 (2021-07-06) ------------------ From 63c3b26f6aa91740dff5ea041fc713cfb53aee51 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 13 Jul 2021 23:02:23 +1000 Subject: [PATCH 034/163] Fixed using info dictionary when writing multiple frames --- Tests/test_file_apng.py | 24 ++++++++++++++++++++++++ src/PIL/PngImagePlugin.py | 19 +++++++++++-------- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Tests/test_file_apng.py b/Tests/test_file_apng.py index 15e007ca131..d48e5ce07f3 100644 --- a/Tests/test_file_apng.py +++ b/Tests/test_file_apng.py @@ -441,6 +441,12 @@ def test_apng_save_duration_loop(tmp_path): assert im.n_frames == 1 assert im.info.get("duration") == 750 + # test info duration + frame.info["duration"] = 750 + frame.save(test_file, save_all=True) + with Image.open(test_file) as im: + assert im.info.get("duration") == 750 + def test_apng_save_disposal(tmp_path): test_file = str(tmp_path / "temp.png") @@ -531,6 +537,17 @@ def test_apng_save_disposal(tmp_path): assert im.getpixel((0, 0)) == (0, 255, 0, 255) assert im.getpixel((64, 32)) == (0, 255, 0, 255) + # test info disposal + red.info["disposal"] = PngImagePlugin.APNG_DISPOSE_OP_BACKGROUND + red.save( + test_file, + save_all=True, + append_images=[Image.new("RGBA", (10, 10), (0, 255, 0, 255))], + ) + with Image.open(test_file) as im: + im.seek(1) + assert im.getpixel((64, 32)) == (0, 0, 0, 0) + def test_apng_save_disposal_previous(tmp_path): test_file = str(tmp_path / "temp.png") @@ -611,3 +628,10 @@ def test_apng_save_blend(tmp_path): im.seek(2) assert im.getpixel((0, 0)) == (0, 255, 0, 255) assert im.getpixel((64, 32)) == (0, 255, 0, 255) + + # test info blend + red.info["blend"] = PngImagePlugin.APNG_BLEND_OP_OVER + red.save(test_file, save_all=True, append_images=[green, transparent]) + with Image.open(test_file) as im: + im.seek(2) + assert im.getpixel((0, 0)) == (0, 255, 0, 255) diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py index a91393726d6..0c466da512f 100644 --- a/src/PIL/PngImagePlugin.py +++ b/src/PIL/PngImagePlugin.py @@ -1061,8 +1061,10 @@ def _write_multiple_frames(im, fp, chunk, rawmode): default_image = im.encoderinfo.get("default_image", im.info.get("default_image")) duration = im.encoderinfo.get("duration", im.info.get("duration", 0)) loop = im.encoderinfo.get("loop", im.info.get("loop", 0)) - disposal = im.encoderinfo.get("disposal", im.info.get("disposal")) - blend = im.encoderinfo.get("blend", im.info.get("blend")) + disposal = im.encoderinfo.get( + "disposal", im.info.get("disposal", APNG_DISPOSE_OP_NONE) + ) + blend = im.encoderinfo.get("blend", im.info.get("blend", APNG_BLEND_OP_SOURCE)) if default_image: chain = itertools.chain(im.encoderinfo.get("append_images", [])) @@ -1149,9 +1151,10 @@ def _write_multiple_frames(im, fp, chunk, rawmode): bbox = frame_data["bbox"] im_frame = im_frame.crop(bbox) size = im_frame.size - duration = int(round(frame_data["encoderinfo"].get("duration", 0))) - disposal = frame_data["encoderinfo"].get("disposal", APNG_DISPOSE_OP_NONE) - blend = frame_data["encoderinfo"].get("blend", APNG_BLEND_OP_SOURCE) + encoderinfo = frame_data["encoderinfo"] + frame_duration = int(round(encoderinfo.get("duration", duration))) + frame_disposal = encoderinfo.get("disposal", disposal) + frame_blend = encoderinfo.get("blend", blend) # frame control chunk( fp, @@ -1161,10 +1164,10 @@ def _write_multiple_frames(im, fp, chunk, rawmode): o32(size[1]), # height o32(bbox[0]), # x_offset o32(bbox[1]), # y_offset - o16(duration), # delay_numerator + o16(frame_duration), # delay_numerator o16(1000), # delay_denominator - o8(disposal), # dispose_op - o8(blend), # blend_op + o8(frame_disposal), # dispose_op + o8(frame_blend), # blend_op ) seq_num += 1 # frame data From e766ddbc399b30164a9ce195d072cce0a0054507 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 13 Jul 2021 22:59:49 +1000 Subject: [PATCH 035/163] Removed unnecessary code --- src/PIL/PngImagePlugin.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/PIL/PngImagePlugin.py b/src/PIL/PngImagePlugin.py index 0c466da512f..0f596f1fdb3 100644 --- a/src/PIL/PngImagePlugin.py +++ b/src/PIL/PngImagePlugin.py @@ -1119,12 +1119,8 @@ def _write_multiple_frames(im, fp, chunk, rawmode): and prev_disposal == encoderinfo.get("disposal") and prev_blend == encoderinfo.get("blend") ): - frame_duration = encoderinfo.get("duration", 0) - if frame_duration: - if "duration" in previous["encoderinfo"]: - previous["encoderinfo"]["duration"] += frame_duration - else: - previous["encoderinfo"]["duration"] = frame_duration + if isinstance(duration, (list, tuple)): + previous["encoderinfo"]["duration"] += encoderinfo["duration"] continue else: bbox = None From a46f5cdd0a1b47403e5b4733110c3f70fa7a093d Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 15 Jul 2021 19:38:26 +1000 Subject: [PATCH 036/163] PSD layer count may be negative --- Tests/images/negative_layer_count.psd | Bin 0 -> 5492 bytes Tests/test_file_psd.py | 7 ++++--- src/PIL/PsdImagePlugin.py | 3 ++- src/PIL/_binary.py | 10 ++++++++++ 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 Tests/images/negative_layer_count.psd diff --git a/Tests/images/negative_layer_count.psd b/Tests/images/negative_layer_count.psd new file mode 100644 index 0000000000000000000000000000000000000000..b111c2d5675ab2eec3bf2df52d2af603e006d2a3 GIT binary patch literal 5492 zcmeHKO=uHA7=4?hq{hTl%%O;f98ym$h*rt5u0koK5Yh;(dT_Iwq@meO*iDdtN5N~U z2Y(<~_29*`UOjjf1i>E=Z{E~{q6ej}Z)R;1O4EZ72D6Z>y!BC_&{8_Filxe9~ zwrA<-nTDXqRZ=WNo1)is(}|n_Osi!V=GFA_%Eff_Bce#+0H%=8bfyVxia1^E!=*l~ui7SUW@(c#OpEbD%N{laz9z6)Z!u@<3B)dWb)!z`@$d~$WUX>9fID}A<5kAKJmB2p zbl9oezBYgB2ORv({?p~S)5s3rjoe+?5I2t_X;(JH&9)l0>53&&+V+U4n!Z-G8*P#- zZ0c>RM%^TP3@U4`V+~c6yx?wu7L#}{80{`h$3e8C4o{@|m_Cm1j?T3iN$p3Q%x^D0V6&OMVeDZJo54vN9CIA2c literal 0 HcmV?d00001 diff --git a/Tests/test_file_psd.py b/Tests/test_file_psd.py index bf2a5fea09d..f50fe133ffc 100644 --- a/Tests/test_file_psd.py +++ b/Tests/test_file_psd.py @@ -57,9 +57,10 @@ def test_n_frames(): assert im.n_frames == 1 assert not im.is_animated - with Image.open(test_file) as im: - assert im.n_frames == 2 - assert im.is_animated + for path in [test_file, "Tests/images/negative_layer_count.psd"]: + with Image.open(path) as im: + assert im.n_frames == 2 + assert im.is_animated def test_eoferror(): diff --git a/src/PIL/PsdImagePlugin.py b/src/PIL/PsdImagePlugin.py index e7b8846741a..04b21e3debd 100644 --- a/src/PIL/PsdImagePlugin.py +++ b/src/PIL/PsdImagePlugin.py @@ -22,6 +22,7 @@ from ._binary import i8 from ._binary import i16be as i16 from ._binary import i32be as i32 +from ._binary import si16be as si16 MODES = { # (photoshop mode, bits) -> (pil mode, required channels) @@ -179,7 +180,7 @@ def _layerinfo(fp, ct_bytes): def read(size): return ImageFile._safe_read(fp, size) - ct = i16(read(2)) + ct = si16(read(2)) # sanity check if ct_bytes < (abs(ct) * 20): diff --git a/src/PIL/_binary.py b/src/PIL/_binary.py index 5564f450de8..a74ee9eb6f3 100644 --- a/src/PIL/_binary.py +++ b/src/PIL/_binary.py @@ -47,6 +47,16 @@ def si16le(c, o=0): return unpack_from("h", c, o)[0] + + def i32le(c, o=0): """ Converts a 4-bytes (32 bits) string to an unsigned integer. From 0a7af1082731a0ec05354649556ff66f042b1deb Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 16 Jul 2021 20:58:32 +1000 Subject: [PATCH 037/163] Instead of drawing border, calculate palette index before image creation in expand() --- Tests/test_imageops.py | 36 ++++++++++++++++++++++-------------- src/PIL/ImageOps.py | 19 ++++++++++--------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/Tests/test_imageops.py b/Tests/test_imageops.py index f7e6c68bfdd..6aa1cf35edf 100644 --- a/Tests/test_imageops.py +++ b/Tests/test_imageops.py @@ -156,23 +156,31 @@ def test_scale(): assert newimg.size == (25, 25) -def test_expand_palette(): - im = Image.open("Tests/images/p_16.tga") - im_expanded = ImageOps.expand(im, 10, (255, 0, 0)) - - px = im_expanded.convert("RGB").load() - for b in range(10): +@pytest.mark.parametrize("border", (10, (1, 2, 3, 4))) +def test_expand_palette(border): + with Image.open("Tests/images/p_16.tga") as im: + im_expanded = ImageOps.expand(im, border, (255, 0, 0)) + + if isinstance(border, int): + left = top = right = bottom = border + else: + left, top, right, bottom = border + px = im_expanded.convert("RGB").load() for x in range(im_expanded.width): - assert px[x, b] == (255, 0, 0) - assert px[x, im_expanded.height - 1 - b] == (255, 0, 0) + for b in range(top): + assert px[x, b] == (255, 0, 0) + for b in range(bottom): + assert px[x, im_expanded.height - 1 - b] == (255, 0, 0) for y in range(im_expanded.height): - assert px[b, x] == (255, 0, 0) - assert px[b, im_expanded.width - 1 - b] == (255, 0, 0) + for b in range(left): + assert px[b, y] == (255, 0, 0) + for b in range(right): + assert px[im_expanded.width - 1 - b, y] == (255, 0, 0) - im_cropped = im_expanded.crop( - (10, 10, im_expanded.width - 10, im_expanded.height - 10) - ) - assert_image_equal(im_cropped, im) + im_cropped = im_expanded.crop( + (left, top, im_expanded.width - right, im_expanded.height - bottom) + ) + assert_image_equal(im_cropped, im) def test_colorize_2color(): diff --git a/src/PIL/ImageOps.py b/src/PIL/ImageOps.py index e06a7eaca2a..f0c932d33a6 100644 --- a/src/PIL/ImageOps.py +++ b/src/PIL/ImageOps.py @@ -21,7 +21,7 @@ import operator import re -from . import Image, ImageDraw +from . import Image # # helpers @@ -395,15 +395,16 @@ def expand(image, border=0, fill=0): height = top + image.size[1] + bottom color = _color(fill, image.mode) if image.mode == "P" and image.palette: - out = Image.new(image.mode, (width, height)) - out.putpalette(image.palette) - out.paste(image, (left, top)) - - draw = ImageDraw.Draw(out) - draw.rectangle((0, 0, width - 1, height - 1), outline=color, width=border) + image.load() + palette = image.palette.copy() + if isinstance(color, tuple): + color = palette.getcolor(color) else: - out = Image.new(image.mode, (width, height), color) - out.paste(image, (left, top)) + palette = None + out = Image.new(image.mode, (width, height), color) + if palette: + out.putpalette(palette.palette) + out.paste(image, (left, top)) return out From a9fccfada1754a049f0e5c1dbb3eb69bb678ad86 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 18 Jul 2021 12:35:27 +1000 Subject: [PATCH 038/163] Added WalImageFile class --- Tests/images/hopper_wal.png | Bin 0 -> 6469 bytes Tests/test_file_wal.py | 18 ++++++---- src/PIL/WalImageFile.py | 67 ++++++++++++++++++------------------ 3 files changed, 46 insertions(+), 39 deletions(-) create mode 100644 Tests/images/hopper_wal.png diff --git a/Tests/images/hopper_wal.png b/Tests/images/hopper_wal.png new file mode 100644 index 0000000000000000000000000000000000000000..b6067c219c49324518e42cdcbfaded433964f688 GIT binary patch literal 6469 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 literal 0 HcmV?d00001 diff --git a/Tests/test_file_wal.py b/Tests/test_file_wal.py index 60be1d5bcd5..f25b42fe0c4 100644 --- a/Tests/test_file_wal.py +++ b/Tests/test_file_wal.py @@ -1,15 +1,21 @@ from PIL import WalImageFile +from .helper import assert_image_equal_tofile + def test_open(): # Arrange TEST_FILE = "Tests/images/hopper.wal" # Act - im = WalImageFile.open(TEST_FILE) + with WalImageFile.open(TEST_FILE) as im: + + # Assert + assert im.format == "WAL" + assert im.format_description == "Quake2 Texture" + assert im.mode == "P" + assert im.size == (128, 128) + + assert isinstance(im, WalImageFile.WalImageFile) - # Assert - assert im.format == "WAL" - assert im.format_description == "Quake2 Texture" - assert im.mode == "P" - assert im.size == (128, 128) + assert_image_equal_tofile(im, "Tests/images/hopper_wal.png") diff --git a/src/PIL/WalImageFile.py b/src/PIL/WalImageFile.py index b578d698181..1354ad32b52 100644 --- a/src/PIL/WalImageFile.py +++ b/src/PIL/WalImageFile.py @@ -23,54 +23,55 @@ To open a WAL file, use the :py:func:`PIL.WalImageFile.open()` function instead. """ -import builtins - -from . import Image +from . import Image, ImageFile from ._binary import i32le as i32 -def open(filename): - """ - Load texture from a Quake2 WAL texture file. +class WalImageFile(ImageFile.ImageFile): - By default, a Quake2 standard palette is attached to the texture. - To override the palette, use the :py:func:`PIL.Image.Image.putpalette()` method. + format = "WAL" + format_description = "Quake2 Texture" - :param filename: WAL file name, or an opened file handle. - :returns: An image instance. - """ - # FIXME: modify to return a WalImageFile instance instead of - # plain Image object ? + def _open(self): + self.mode = "P" - def imopen(fp): # read header fields - header = fp.read(32 + 24 + 32 + 12) - size = i32(header, 32), i32(header, 36) - offset = i32(header, 40) + header = self.fp.read(32 + 24 + 32 + 12) + self._size = i32(header, 32), i32(header, 36) + Image._decompression_bomb_check(self.size) # load pixel data - fp.seek(offset) - - Image._decompression_bomb_check(size) - im = Image.frombytes("P", size, fp.read(size[0] * size[1])) - im.putpalette(quake2palette) - - im.format = "WAL" - im.format_description = "Quake2 Texture" + offset = i32(header, 40) + self.fp.seek(offset) # strings are null-terminated - im.info["name"] = header[:32].split(b"\0", 1)[0] + self.info["name"] = header[:32].split(b"\0", 1)[0] next_name = header[56 : 56 + 32].split(b"\0", 1)[0] if next_name: - im.info["next_name"] = next_name + self.info["next_name"] = next_name - return im + def load(self): + if self.im: + # Already loaded + return - if hasattr(filename, "read"): - return imopen(filename) - else: - with builtins.open(filename, "rb") as fp: - return imopen(fp) + self.im = Image.core.new(self.mode, self.size) + self.frombytes(self.fp.read(self.size[0] * self.size[1])) + self.putpalette(quake2palette) + Image.Image.load(self) + + +def open(filename): + """ + Load texture from a Quake2 WAL texture file. + + By default, a Quake2 standard palette is attached to the texture. + To override the palette, use the :py:func:`PIL.Image.Image.putpalette()` method. + + :param filename: WAL file name, or an opened file handle. + :returns: An image instance. + """ + return WalImageFile(filename) quake2palette = ( From 426b730d3b0810fca59d4e0bcbc670916b890398 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 18 Jul 2021 18:18:56 +1000 Subject: [PATCH 039/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 4fc55104b31..0e5f0d129d1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression #5588 + [kmilos, radarhere] + - Fixed error saving APNG with duplicate frames and different duration times #5609 [thak1411, radarhere] From 1d73a483f42443c584920151a082ee6a9db4d895 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 19 Jul 2021 09:08:45 +1000 Subject: [PATCH 040/163] Added "transparency" argument to load() --- Tests/images/reqd_showpage_transparency.png | Bin 0 -> 17572 bytes Tests/test_file_eps.py | 11 +++++++++++ docs/handbook/image-file-formats.rst | 7 ++++++- src/PIL/EpsImagePlugin.py | 10 ++++++---- 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 Tests/images/reqd_showpage_transparency.png diff --git a/Tests/images/reqd_showpage_transparency.png b/Tests/images/reqd_showpage_transparency.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce159d0fc0f94f4955c4d4ef64b3f10e7074631 GIT binary patch literal 17572 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 Date: Wed, 21 Jul 2021 22:45:35 +1000 Subject: [PATCH 041/163] Prefer command line tools SDK on macOS --- setup.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 6dc4e1b77df..b56e9063425 100755 --- a/setup.py +++ b/setup.py @@ -533,14 +533,16 @@ def build_extensions(self): _add_directory(include_dirs, "/usr/X11/include") # SDK install path - try: - sdk_path = ( - subprocess.check_output(["xcrun", "--show-sdk-path"]) - .strip() - .decode("latin1") - ) - except Exception: - sdk_path = None + sdk_path = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk" + if not os.path.exists(sdk_path): + try: + sdk_path = ( + subprocess.check_output(["xcrun", "--show-sdk-path"]) + .strip() + .decode("latin1") + ) + except Exception: + sdk_path = None if sdk_path: _add_directory(library_dirs, os.path.join(sdk_path, "usr", "lib")) _add_directory(include_dirs, os.path.join(sdk_path, "usr", "include")) From a9489c23b31523ba58e4737bf2f0705c11378056 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 22 Jul 2021 19:35:16 +1000 Subject: [PATCH 042/163] Updated macOS tested Pillow versions [ci skip] --- docs/installation.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 5fe1963c97c..48d81359fc6 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -494,11 +494,11 @@ These platforms have been reported to work at the versions mentioned. | Operating system | | Tested Python | | Latest tested | | Tested | | | | versions | | Pillow version | | processors | +==================================+===========================+==================+==============+ -| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.2.0 |arm | +| macOS 11.0 Big Sur | 3.7, 3.8, 3.9 | 8.3.1 |arm | | +---------------------------+------------------+--------------+ -| | 3.6, 3.7, 3.8, 3.9 | 8.2.0 |x86-64 | +| | 3.6, 3.7, 3.8, 3.9 | 8.3.1 |x86-64 | +----------------------------------+---------------------------+------------------+--------------+ -| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.0.1 |x86-64 | +| macOS 10.15 Catalina | 3.6, 3.7, 3.8, 3.9 | 8.3.1 |x86-64 | | +---------------------------+------------------+ | | | 3.5 | 7.2.0 | | +----------------------------------+---------------------------+------------------+--------------+ From 7998d0252fb00fbcb4b75b5d0904bac683f9fd99 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 23 Jul 2021 18:25:35 +1000 Subject: [PATCH 043/163] Corrected Python 3.10 support [ci skip] --- docs/installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 48d81359fc6..2b642bf4e4b 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -18,9 +18,9 @@ Pillow supports these Python versions. +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Python |3.10 | 3.9 | 3.8 | 3.7 | 3.6 | 3.5 | 3.4 | 2.7 | +======================+=====+=====+=====+=====+=====+=====+=====+=====+ -| Pillow >= 8.3 | Yes | Yes | Yes | Yes | Yes | | | | +| Pillow >= 8.4 | Yes | Yes | Yes | Yes | Yes | | | | +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ -| Pillow 8.0 - 8.2 | | Yes | Yes | Yes | Yes | | | | +| Pillow 8.0 - 8.3 | | Yes | Yes | Yes | Yes | | | | +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Pillow 7.0 - 7.2 | | | Yes | Yes | Yes | Yes | | | +----------------------+-----+-----+-----+-----+-----+-----+-----+-----+ From 4038a287eececa0d07b61005fb87292a25da80ca Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 24 Jul 2021 14:21:33 +1000 Subject: [PATCH 044/163] Corrected pathlib.Path detection when saving --- Tests/test_image.py | 9 +++++---- src/PIL/Image.py | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Tests/test_image.py b/Tests/test_image.py index c4e6f8ade71..2d661a90327 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -149,10 +149,11 @@ def test_pathlib(self, tmp_path): assert im.mode == "RGB" assert im.size == (128, 128) - temp_file = str(tmp_path / "temp.jpg") - if os.path.exists(temp_file): - os.remove(temp_file) - im.save(Path(temp_file)) + for ext in (".jpg", ".jp2"): + temp_file = str(tmp_path / ("temp." + ext)) + if os.path.exists(temp_file): + os.remove(temp_file) + im.save(Path(temp_file)) def test_fp_name(self, tmp_path): temp_file = str(tmp_path / "temp.jpg") diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 124ca392b07..7bc4d67b576 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -2180,12 +2180,12 @@ def save(self, fp, format=None, **params): filename = "" open_fp = False - if isPath(fp): - filename = fp - open_fp = True - elif isinstance(fp, Path): + if isinstance(fp, Path): filename = str(fp) open_fp = True + elif isPath(fp): + filename = fp + open_fp = True elif fp == sys.stdout: try: fp = sys.stdout.buffer From 89ab20fd1569f4a40245a16fb24b142928f77e35 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 25 Jul 2021 16:32:59 +1000 Subject: [PATCH 045/163] putpalette() rawmode may be modes that can be unpacked to RGB --- src/PIL/Image.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 124ca392b07..d10fd1e5020 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -1751,14 +1751,19 @@ def putpalette(self, data, rawmode="RGB"): Attaches a palette to this image. The image must be a "P", "PA", "L" or "LA" image. - The palette sequence must contain at most 768 integer values, or 1024 - integer values if alpha is included. Each group of values represents - the red, green, blue (and alpha if included) values for the - corresponding pixel index. Instead of an integer sequence, you can use - an 8-bit string. + The palette sequence must contain at most 256 colors, made up of one + integer value for each channel in the raw mode. + For example, if the raw mode is "RGB", then it can contain at most 768 + values, made up of red, green and blue values for the corresponding pixel + index in the 256 colors. + If the raw mode is "RGBA", then it can contain at most 1024 values, + containing red, green, blue and alpha values. + + Alternatively, an 8-bit string may be used instead of an integer sequence. :param data: A palette sequence (either a list or a string). - :param rawmode: The raw mode of the palette. + :param rawmode: The raw mode of the palette. Either "RGB", "RGBA", or a + mode that can be transformed to "RGB" (e.g. "R", "BGR;15", "RGBA;L"). """ from . import ImagePalette From 55cec2a0d0ea345705b27c0e12e0ad30af89ffb3 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 26 Jul 2021 18:57:04 +1000 Subject: [PATCH 046/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 0e5f0d129d1..205002c0691 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Fixed ImageOps expand with tuple border on P image #5615 + [radarhere] + - Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression #5588 [kmilos, radarhere] From a43d46e87af1962697d10a20e366524a6062fe71 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 26 Jul 2021 22:53:39 +1000 Subject: [PATCH 047/163] Corrected size parameter documentation [ci skip] --- src/PIL/ImagePalette.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/PIL/ImagePalette.py b/src/PIL/ImagePalette.py index b0c722b29af..214059f5108 100644 --- a/src/PIL/ImagePalette.py +++ b/src/PIL/ImagePalette.py @@ -28,12 +28,11 @@ class ImagePalette: :param mode: The mode to use for the Palette. See: :ref:`concept-modes`. Defaults to "RGB" :param palette: An optional palette. If given, it must be a bytearray, - an array or a list of ints between 0-255 and of length ``size`` - times the number of colors in ``mode``. The list must be aligned + an array or a list of ints between 0-255. The list must be aligned by channel (All R values must be contiguous in the list before G and B values.) Defaults to 0 through 255 per channel. - :param size: An optional palette size. If given, it cannot be equal to - or greater than 256. Defaults to 0. + :param size: An optional palette size. If given, an error is raised + if ``palette`` is not of equal length. """ def __init__(self, mode="RGB", palette=None, size=0): From 3abe5e884b84b6421a0a7aa298046b5efba84481 Mon Sep 17 00:00:00 2001 From: Alexander Karpinsky Date: Mon, 26 Jul 2021 16:13:01 +0300 Subject: [PATCH 048/163] Add TypeError handling to pass corrupted dpi value in exif --- Tests/images/broken_exif_dpi.jpg | Bin 0 -> 7743 bytes Tests/test_file_jpeg.py | 9 +++++++++ src/PIL/JpegImagePlugin.py | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 Tests/images/broken_exif_dpi.jpg diff --git a/Tests/images/broken_exif_dpi.jpg b/Tests/images/broken_exif_dpi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c88b94630b598bb5d1e553c2c5d1177f4724ed3 GIT binary patch literal 7743 zcmdUUc|4Te|MxZaGRQ8wNZplf#ug!ol3R+9wPZJp#8AYjyHX*gP)gS9OV-H@CQG>O z`_2@FVFod_8DoAIE%*KXJfG&gY!r`do}5#%EyPIU{2u z00IF32>1aQU&L4pZ+f}`fT<~P1ONaIKmZgog9yU0Q$c=UR%;M5?c$xjZ3x>BIlu(U zd3I`m4@4}GeY=p4rm^703x=FSwVaRa`<01Rd(f4pj;UO z+rwSa#@w--i#C|FM(t!wxtXb6W-s0O#4!WA4jP-5tvh zVhSkY0R09(=Z#Iw&PyAZnO`t7*S}HN z8{q5j;d@=$z(D%2sgtuOa_9aJ0Dvj0XlSXxw3OAQRp44`$F<;az}(m0|H=iFzlSH% z$uq#yANb!$0NJ~VyF7Qo0K1#?8*4p0@XvZaJoE!Yo&vyA=3nc>eCjF7Z)_C{0rvh_ z6K1birr&mM#IpRB2gkDhmfwwK|7YD|Ieuc$KrXj1DF3xrcXWRF2y)B#mya30eB9C5`!Ac&e_`oeA7#L}yQh6BK__J=M+Sp%l(q^7Br?tN;TmX&)bHHzk;&CfLgc`L(7XBk-*5oEeZKixqfQ ze__XepH(Kvueh?fG5wCWP&_zprh|)pjY!sPM6X4Ezr8v%>B?6WC!;Yu>#Cm%H}m#@$#03qfap)$a${b_lS` ztJU>@B+`Xl3@z0ITql21_&+l^^bZBb2moc?os$>P0~W(sUM)l*;SL9MGET)$jb4$P ztkXU!`_Ow(HOMpcPHBTk-xjZDV?K}Pfb>S*>-n289hRgF*jeSN&ukZ0QDSb|I=8~vq`$=Wh2bEcuO>2jQJ|x+TZLY zaS21za&NOEiy0D^G|m{MZyZ^3w*Sn*_vcFz$42(X9j%h3W-e{H+TwVo=KfR<_3H8k z(T#KMA3s%Kge!Zlw0Q`n1P+k3vSEWl_mc&eA_aP|b>jBlGw%wJ+MI1gI{hB?mdF;5 zEV*OhDn|;!8=kkYG?_S<4A%2h>C2E_OiIAh`)r1L19ZD($8H zg4@9Bv%vJ!XQ>M!;o5oa^%)$b$BkskgL`MLD0hkWj;ppk$DRhnj`@k$Yd6-QVHqQc zf{9wi6B#Yzn;i#rhBZGFye7LER4lV>9U{uVlAOPH#+}hc(J<%nIHl?+q0o2p=<7XG zmm(dpiSW)fV%EZb+aEs*r^L`j9f>C!6+X>ZS~*{86Td2v{7NP~ z0pcJ{Zf+@G6&iK$K~!teHG(^UwZ4OxkvqQ2@V^+E)@iu96?)|zl9jU;0m^!Y|E%z^c2=s0I(xPAEr4V2ZyGtw7JDKug@n*r3 zkcjf|40+;53zwWLZoP*gTd`?&E==~%yXbA-?Q7v_Zm7xg_Giw!E}tc& z>A4vXpBPl+ca>1+$jh9%_^2WtABs{QvbSAl0NP>eVZI9oPbYG`xM!GPO0c13-i{Kt zAIn@*vr^7s07FsfYX$gzufj3k{Nr-ZkW!}nLRwF6EFW5T2qmN;7{L6w>h`%|WJY=X zM2|$3W=-QwrahldlySOObf!ADnE9$NAysyq_k~YqTA8$to*fB z11-Z??MUfIo)cm7_L7eCI_hO#ziKTS;m=wxG641)x}WKUPp%TE(c1Y>W!0n1qg5gb z+}_PI#^&CSmh2^wT$Yn=qb71Z#?GUzrtP(nDDTc4Xp(KA@-+J9TnF_<$%Xb3WB_9p*rHfL#jOdvUmDZYV? z9jz_36yJpHq@dFofbpC#kJcaxU0n6tF1uv9{5x*gKWEz-2j8o5g zFKR2w04~LI4R~n4+T$3&r!*H1Y(}^~;)GY33CiY6E%iZVx*r$M=!fvYMf!e!^?zC1Z-b;YA3EtV+K>U<@LLkfnq6Dir_VREus4NjyGFh_)|)TITOYAd ziLdFmENCG%ytz0(mE;h$Fy5LsqMNW~fu1^CK^Wj~z!j*F<|@aya8-A@4si5dzcX}Q zZ$(aAyz0-n_Lq&~Zp^)vqxI>>O$~32Tlk%Ybd>GHOi3po(-r9TeC-3=q>+oJtdO%hZr`J*sN}Wt+V~yb$JpJivP1l>`Db5omr~2=D+Nf zIWzbkJ5x;VGY}cgU9As${*nQ7qwI0x`AS@c5G{2B3V~Iq{&iIg& ziC;!f|#^Z80FK+MLB#Zp3l&C-#w@Py1DC?h;AxD$e zE56;n%SVFiOSfD?Z3+p-i_K2aqwR8-4-9~XCb5bC5c|hi&_yJhX>@LGK_!XcsjiMe zidtIC1XZ@9b0}eVJ8g*j zDfv&K!77b@|FfQmYGF+OFmapORjVn?>#ElGS$ui{$|U|bqOm~AkZj0ueCVc*X$LCF zK$jNndhgO`^83yz>>v`kxKWh4{Vd>Zfs%G!2}U)E(~*M#q*YCJ<|kjCYxXg%$)wWM z)!MV071k=(CiKwjL@q9iQ!XKSCH z9L|;{-ps`WMA;`)uB#OKkBH2Md{h9+LN2diR^s42?>UlBu|M>0qHmt0LMV-CkFC;Cy;goRL}}B*8=evNq3+9t-Ye6TNYsAXOriX5$;#?lH^ zQAI|Cd@&UVRH)x_-4v$BMJGBmdeqsw_-$79c+6Jk4FCOTtHc0BYSU^UCV8NBymL0E zxaWjjWn3z5-uh3Ly~X}8iFyMBLjJa>cQJt?q%PIZUC{rjvft&gN?vJK$Rp_m=gTvi zI3vtvzhuN}(6Lo{=&fd9i;z+G?D2PTF7${#0&aXE4_&%l@gl?HsZy=-Lm2RucMRuT zG-ERtg?wT#yB*--!1{nIx^U!W3&Ek#If#nT(=J@S-J;|DHpwjYm@^r})ggV^&M{#c zkDl3{l(Hngdc~gqU}&Za6?{1KeupQ!Cjv>yMc6U`vlRyLnqtXWqD2?ErKw|rDtm9? zjJ(dXRzVe`p2(!DFQCFk(dS|%)8X@GM(qs^4Rg_$oMDruY_*h%rPlq5f8S>w9XQ!n+fmqi})d0>L?vRPmNDgnvXVMR`;AO~ODg2D0dxtxMKG@Eit zseCoToidK7)~=vUV7E>{p={o@O-1|hOMh}5nq&Z(i{#^~&I=}gblMv2lln{;ZTckK zj+HW+Uz~d}ai*Xo1yNY*tfT%wE$-3`HVZB}lBoMvO(OaGnG2bX&^IQwno3SS(UZrW ztIf9d`0$y@B_}%P#=i7f5l81Gg|&@M#rWq?mc^nGtkA!m-?q$2$B&TlXEr&ts-TJf z!PcW}Y99z?tcnF?>IrNI@<&m=t9rVhW)lKxBamSpEq|v~MLsZi^_T_$tSzm! z?^d`_*J@hEeP`#kc9vF{_mvfVS<4mti|sbBy1yopyRU>UYdxP^4?M}i@lC}tBXfs+%7k@D?>Y+COM5~p0Be*S}D`ILF^JJ~~`nF|QQTvFQWnDp7Hi<`-L!SQI>Ss6oAHG99~tFq}%+ZxR|$j^IHc_V%#WiJoYoenB+UMtaHfv zNh7AGa2kf2=$z5}qN5O35R<#9l%A$mu3A+?dm}|pnb3P*LY+{ncAuA*KaA;V4ikJ= zgzi#uCWZcqUKn5isd(acuw`07zmH~Z`hixviY`YbKglJsX>`cC*7)pxi8EPL-}D}u zoxOT>A+H^t{BcHm>(ld|rBd(4u+J^~@6A{zgc(K^V$b^HjpiLg35F9Rp@#ayh4?HK z=WH0k2s>^W_g0*g`glhBIs@1fLp4%qpXjvcJC$HZpr5T?AM7s(F)(h;NiFDND;1Nh zP(@otJ19oRQ}4ut>7A{ZKMjWs5R4VaW>hU5ctRM!@xs--QljF^A^y8{9k=;d4X&%q z44*x97fvj&t?k|vUHfqE3PBG>p}JW((ve?0=~O;V>04G6~)p{p+kstZdgram}CNVN_v zH2F)l8O@|4;kB{gh4I(*>ik7H&L&CE6vkTf-0_s?p%%PxP>y+l=6q_G`uDGb`G(0$ zcwt8W+#8py*fdQ&0pb_0mGy%v(=QLt=bN=0`c`@HM5u#-{1e<@USmB5Hd-R0pI?C; z5gpW^Y=UQ14Hw)om!y{sXFsy8AtscLxN*ZP<@mzw6WXZCgrtS?qCoPCL1KYooKyvN zoqsLUUk}RwNa^&e4B#0YJ=sLJ+c*2Jrf{gY+lwjiwc=EL-%*WRJsG?$Hbmu$rO>#3 zK|JALv{FdDLwWMK&i1@*Ue8c-aIEJP(Qb)~q#o6nSMMBY3QEVU`DYD`OLZjG#AH#; zDv;ZcFk2cc$!QZ2r?GmL%E8FbtVdLya^@qvEg5+360_j}nN%Xz%C> zw9Y*GJ_D%Kb7ue?MRfCFnsA;sMK5g}@5TVi7bv9dqSG@aeYDQah743t?D*g{gE)(!@*z#>6$gYr2xqM#V9JMD&KG z8BbqisKV-#HW4;!e6bTGPF6mL?v2#W>ldcRe%z+}W_VE@l-0HMjZG>@ zTMB%u^COiG)<2Tz|IIHjU;QIp&A#Iogehppab6Zy85K4@{fq2Qe*6bucQ^!2fm!p~ zJ+g4~CBbVqy7vmnseU>5eaE$3&;DnQ-Ti;^?6+h8`1Kzt?#b-5$D8R>b&n6HF#Ugg I@i2z}3!$1+p8x;= literal 0 HcmV?d00001 diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index 68096e92d33..15518756c1c 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -718,6 +718,15 @@ def test_dpi_exif_zero_division(self): # This should return the default, and not raise a ZeroDivisionError assert im.info.get("dpi") == (72, 72) + def test_dpi_exif_string(self): + # Arrange + # 0x011A tag in this exif contains string '300300\x02' + with Image.open("Tests/images/broken_exif_dpi.jpg") as im: + + # Act / Assert + # This should return the default + assert im.info.get("dpi") == (72, 72) + def test_no_dpi_in_exif(self): # Arrange # This is photoshop-200dpi.jpg with resolution removed from EXIF: diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index b18e8126fb4..7d3cbbf499a 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -168,7 +168,7 @@ def APP(self, marker): # 1 dpcm = 2.54 dpi dpi *= 2.54 self.info["dpi"] = dpi, dpi - except (KeyError, SyntaxError, ValueError, ZeroDivisionError): + except (TypeError, KeyError, SyntaxError, ValueError, ZeroDivisionError): # SyntaxError for invalid/unreadable EXIF # KeyError for dpi not included # ZeroDivisionError for invalid dpi rational value From 3462b5fd74e5e86539e7fa639adf4a52d53bf57c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 28 Jul 2021 22:26:02 +1000 Subject: [PATCH 049/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 205002c0691..3d30e05ee44 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,12 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Added tags when saving YCbCr TIFF #5597 + [radarhere] + +- PSD layer count may be negative #5613 + [radarhere] + - Fixed ImageOps expand with tuple border on P image #5615 [radarhere] From 41b968ad10104d366a8f1fa01d1d8738e94d0ee3 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 29 Jul 2021 16:19:53 +1000 Subject: [PATCH 050/163] Deprecate ImagePalette size parameter --- Tests/test_imagepalette.py | 5 +++-- docs/deprecations.rst | 11 +++++++++++ src/PIL/ImagePalette.py | 11 +++++++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index ecfbda1d89b..5a59b779923 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -10,8 +10,9 @@ def test_sanity(): palette = ImagePalette.ImagePalette("RGB", list(range(256)) * 3) assert len(palette.colors) == 256 - with pytest.raises(ValueError): - ImagePalette.ImagePalette("RGB", list(range(256)) * 3, 10) + with pytest.warns(DeprecationWarning): + with pytest.raises(ValueError): + ImagePalette.ImagePalette("RGB", list(range(256)) * 3, 10) def test_reload(): diff --git a/docs/deprecations.rst b/docs/deprecations.rst index 9ce2fe7b329..a00623782eb 100644 --- a/docs/deprecations.rst +++ b/docs/deprecations.rst @@ -92,6 +92,17 @@ dictionary. The :py:attr:`~PIL.JpegImagePlugin.convert_dict_qtables` method no l performs any operations on the data given to it, has been deprecated and will be removed in Pillow 10.0.0 (2023-01-02). +ImagePalette size parameter +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. deprecated:: 8.4.0 + +The ``size`` parameter will be removed in Pillow 10.0.0 (2023-01-02). + +Before Pillow 8.3.0, ImagePalette required palette data of particular lengths by +default, and the size parameter could be used to override that. Pillow 8.3.0 removed +the default required length, also removing the need for the size parameter. + Removed features ---------------- diff --git a/src/PIL/ImagePalette.py b/src/PIL/ImagePalette.py index 214059f5108..676e452bde4 100644 --- a/src/PIL/ImagePalette.py +++ b/src/PIL/ImagePalette.py @@ -17,6 +17,7 @@ # import array +import warnings from . import GimpGradientFile, GimpPaletteFile, ImageColor, PaletteFile @@ -40,8 +41,14 @@ def __init__(self, mode="RGB", palette=None, size=0): self.rawmode = None # if set, palette contains raw data self.palette = palette or bytearray() self.dirty = None - if size != 0 and size != len(self.palette): - raise ValueError("wrong palette size") + if size != 0: + warnings.warn( + "The size parameter is deprecated and will be removed in Pillow 10 " + "(2023-01-02).", + DeprecationWarning, + ) + if size != len(self.palette): + raise ValueError("wrong palette size") @property def palette(self): From cf275737ee6abbd656fd352cfbe9618af35e8c5c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 10 Jul 2021 00:00:50 +1000 Subject: [PATCH 051/163] Do not rearrange palette channels --- Tests/test_file_gif.py | 2 +- src/PIL/GifImagePlugin.py | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 2632ab7c04f..05e2ddcbebb 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -833,7 +833,7 @@ def test_palette_save_ImagePalette(tmp_path): with Image.open(out) as reloaded: im.putpalette(palette) - assert_image_equal(reloaded, im) + assert_image_equal(reloaded.convert("RGB"), im.convert("RGB")) def test_save_I(tmp_path): diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index fe57e24e277..ad97b81a52a 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -396,15 +396,7 @@ def _normalize_palette(im, palette, info): if isinstance(palette, (bytes, bytearray, list)): source_palette = bytearray(palette[:768]) if isinstance(palette, ImagePalette.ImagePalette): - source_palette = bytearray( - itertools.chain.from_iterable( - zip( - palette.palette[:256], - palette.palette[256:512], - palette.palette[512:768], - ) - ) - ) + source_palette = bytearray(palette.palette) if im.mode == "P": if not source_palette: From d0a30ec369e5e786a709e27b92f5abf05213d187 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 10 Jul 2021 00:36:24 +1000 Subject: [PATCH 052/163] Updated documentation --- docs/reference/ImagePalette.rst | 4 ---- src/PIL/ImagePalette.py | 8 ++++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/docs/reference/ImagePalette.rst b/docs/reference/ImagePalette.rst index f14c1c3a446..72ccfac7d83 100644 --- a/docs/reference/ImagePalette.rst +++ b/docs/reference/ImagePalette.rst @@ -9,10 +9,6 @@ represent the color palette of palette mapped images. .. note:: - This module was never well-documented. It hasn't changed since 2001, - though, so it's probably safe for you to read the source code and puzzle - out the internals if you need to. - The :py:class:`~PIL.ImagePalette.ImagePalette` class has several methods, but they are all marked as "experimental." Read that as you will. The ``[source]`` link is there for a reason. diff --git a/src/PIL/ImagePalette.py b/src/PIL/ImagePalette.py index 214059f5108..36fb7fd1385 100644 --- a/src/PIL/ImagePalette.py +++ b/src/PIL/ImagePalette.py @@ -25,12 +25,12 @@ class ImagePalette: """ Color palette for palette mapped images - :param mode: The mode to use for the Palette. See: + :param mode: The mode to use for the palette. See: :ref:`concept-modes`. Defaults to "RGB" :param palette: An optional palette. If given, it must be a bytearray, - an array or a list of ints between 0-255. The list must be aligned - by channel (All R values must be contiguous in the list before G - and B values.) Defaults to 0 through 255 per channel. + an array or a list of ints between 0-255. The list must consist of + all channels for one color followed by the next color (e.g. RGBRGBRGB). + Defaults to an empty palette. :param size: An optional palette size. If given, an error is raised if ``palette`` is not of equal length. """ From a9372d5cf0aa6a56f6e4aa5399f01b2485b1012f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 10 Jul 2021 23:13:46 +1000 Subject: [PATCH 053/163] Fixed generated palettes --- Tests/images/palette_negative.png | Bin 0 -> 17070 bytes Tests/images/palette_sepia.png | Bin 0 -> 20339 bytes Tests/images/palette_wedge.png | Bin 0 -> 17065 bytes Tests/test_image_putpalette.py | 8 +++++++- src/PIL/ImagePalette.py | 14 ++++++-------- 5 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 Tests/images/palette_negative.png create mode 100644 Tests/images/palette_sepia.png create mode 100644 Tests/images/palette_wedge.png diff --git a/Tests/images/palette_negative.png b/Tests/images/palette_negative.png new file mode 100644 index 0000000000000000000000000000000000000000..938a7285fd75af8fcdb5e5857e05e9674b9ae337 GIT binary patch literal 17070 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%0DN|MLC=0`L9H+oFLFil*`C(bS9|Oy`Ir!0kQo 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 F{{cuUG`Ii& literal 0 HcmV?d00001 diff --git a/Tests/images/palette_sepia.png b/Tests/images/palette_sepia.png new file mode 100644 index 0000000000000000000000000000000000000000..f3fc932531f9b73c8d214e7c236c556ab3775d22 GIT binary patch literal 20339 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 literal 0 HcmV?d00001 diff --git a/Tests/images/palette_wedge.png b/Tests/images/palette_wedge.png new file mode 100644 index 0000000000000000000000000000000000000000..23fb7940d6d61c42e69ad3c80fca5e77c26994d3 GIT binary patch literal 17065 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 mp1g?hKH_PmYNYWMwhbk94 Date: Thu, 29 Jul 2021 16:49:09 +1000 Subject: [PATCH 054/163] Highlight class name Co-authored-by: Hugo van Kemenade --- docs/deprecations.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deprecations.rst b/docs/deprecations.rst index a00623782eb..45720ccc017 100644 --- a/docs/deprecations.rst +++ b/docs/deprecations.rst @@ -99,7 +99,7 @@ ImagePalette size parameter The ``size`` parameter will be removed in Pillow 10.0.0 (2023-01-02). -Before Pillow 8.3.0, ImagePalette required palette data of particular lengths by +Before Pillow 8.3.0, ``ImagePalette`` required palette data of particular lengths by default, and the size parameter could be used to override that. Pillow 8.3.0 removed the default required length, also removing the need for the size parameter. From 01ab019ed8736415fcad1381ac658ccef1ca2f5a Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 29 Jul 2021 16:55:50 +1000 Subject: [PATCH 055/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 3d30e05ee44..7f8a9f2e312 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Prefer command line tools SDK on macOS #5624 + [radarhere] + - Added tags when saving YCbCr TIFF #5597 [radarhere] From feb3103bfd9dabe8e8e3bfa16c79de8f23ba6d8a Mon Sep 17 00:00:00 2001 From: Fariz Rahman Date: Fri, 30 Jul 2021 00:57:00 +0400 Subject: [PATCH 056/163] SGI save handler should not close output stream --- src/PIL/SgiImagePlugin.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/PIL/SgiImagePlugin.py b/src/PIL/SgiImagePlugin.py index d0f7c99934f..71e28802269 100644 --- a/src/PIL/SgiImagePlugin.py +++ b/src/PIL/SgiImagePlugin.py @@ -193,8 +193,6 @@ def _save(im, fp, filename): for channel in im.split(): fp.write(channel.tobytes("raw", rawmode, 0, orientation)) - fp.close() - class SGI16Decoder(ImageFile.PyDecoder): _pulls_fd = True From 6cb127c8cdb95cfc5f8e34e6cc686b565526a933 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 30 Jul 2021 10:26:07 +1000 Subject: [PATCH 057/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 7f8a9f2e312..a3527de7ddd 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Deprecate ImagePalette size parameter #5641 + [radarhere, hugovk] + - Prefer command line tools SDK on macOS #5624 [radarhere] From 438c3cc0977de7b53decf0557d12fe302ea5d3a3 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 30 Jul 2021 19:57:09 +1000 Subject: [PATCH 058/163] Speed up rotating square images by 90 or 270 degrees --- Tests/test_image_rotate.py | 3 +++ src/PIL/Image.py | 6 ++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Tests/test_image_rotate.py b/Tests/test_image_rotate.py index 79ed790429f..2d72ffa684c 100644 --- a/Tests/test_image_rotate.py +++ b/Tests/test_image_rotate.py @@ -33,6 +33,9 @@ def test_angle(): with Image.open("Tests/images/test-card.png") as im: rotate(im, im.mode, angle) + im = hopper() + assert_image_equal(im.rotate(angle), im.rotate(angle, expand=1)) + def test_zero(): for angle in (0, 45, 90, 180, 270): diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 124ca392b07..f00f03c498b 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -2074,10 +2074,8 @@ def rotate( return self.copy() if angle == 180: return self.transpose(ROTATE_180) - if angle == 90 and expand: - return self.transpose(ROTATE_90) - if angle == 270 and expand: - return self.transpose(ROTATE_270) + if angle in (90, 270) and (expand or self.width == self.height): + return self.transpose(ROTATE_90 if angle == 90 else ROTATE_270) # Calculate the affine matrix. Note that this is the reverse # transformation (from destination image to source) because we From 300f1ffc024fb7c7213d94d95963e0963d7e546f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 30 Jul 2021 20:29:07 +1000 Subject: [PATCH 059/163] Added test --- Tests/test_file_sgi.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Tests/test_file_sgi.py b/Tests/test_file_sgi.py index 0210dd4f1c0..6a5d8887d33 100644 --- a/Tests/test_file_sgi.py +++ b/Tests/test_file_sgi.py @@ -73,6 +73,13 @@ def roundtrip(img): img.save(out, format="sgi") assert_image_equal_tofile(img, out) + out = str(tmp_path / "fp.sgi") + with open(out, "wb") as fp: + img.save(fp) + assert_image_equal_tofile(img, out) + + assert not fp.closed + for mode in ("L", "RGB", "RGBA"): roundtrip(hopper(mode)) From 9125631ff04e8925d1ae0f7a310728005f22f73f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 30 Jul 2021 20:25:07 +1000 Subject: [PATCH 060/163] Added flush --- src/PIL/SgiImagePlugin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/PIL/SgiImagePlugin.py b/src/PIL/SgiImagePlugin.py index 71e28802269..5f1ef6edc1b 100644 --- a/src/PIL/SgiImagePlugin.py +++ b/src/PIL/SgiImagePlugin.py @@ -193,6 +193,9 @@ def _save(im, fp, filename): for channel in im.split(): fp.write(channel.tobytes("raw", rawmode, 0, orientation)) + if hasattr(fp, "flush"): + fp.flush() + class SGI16Decoder(ImageFile.PyDecoder): _pulls_fd = True From eee0953bb33a5648c454b4628801034071d4f07d Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 31 Jul 2021 13:55:28 +1000 Subject: [PATCH 061/163] Update CHANGES.rst [ci skip] --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index a3527de7ddd..6c2ba804d2e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog (Pillow) 8.4.0 (unreleased) ------------------ +- Do not close file pointer when saving SGI images #5645 + [farizrahman4u, radarhere] + - Deprecate ImagePalette size parameter #5641 [radarhere, hugovk] From d1815377b8047d77634dab1de39f6554b0596d96 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 30 Jul 2021 20:11:05 +1000 Subject: [PATCH 062/163] Copy palette to new image in transform() --- Tests/test_image_transform.py | 5 +++++ src/PIL/Image.py | 2 ++ 2 files changed, 7 insertions(+) diff --git a/Tests/test_image_transform.py b/Tests/test_image_transform.py index 84590026734..ea208362b2a 100644 --- a/Tests/test_image_transform.py +++ b/Tests/test_image_transform.py @@ -32,6 +32,11 @@ def test_info(self): new_im = im.transform((100, 100), transform) assert new_im.info["comment"] == comment + def test_palette(self): + with Image.open("Tests/images/hopper.gif") as im: + transformed = im.transform(im.size, Image.AFFINE, [1, 0, 0, 0, 1, 0]) + assert im.palette.palette == transformed.palette.palette + def test_extent(self): im = hopper("RGB") (w, h) = im.size diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 124ca392b07..f1b167d6326 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -2479,6 +2479,8 @@ def getdata(self): raise ValueError("missing method data") im = new(self.mode, size, fillcolor) + if self.mode == "P" and self.palette: + im.palette = self.palette.copy() im.info = self.info.copy() if method == MESH: # list of quads From 3cf2fffa335921221dd5bb0f26ff7befaeb17934 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 Aug 2021 09:54:40 +1000 Subject: [PATCH 063/163] Added release notes for #5641 --- docs/releasenotes/8.4.0.rst | 41 +++++++++++++++++++++++++++++++++++++ docs/releasenotes/index.rst | 1 + 2 files changed, 42 insertions(+) create mode 100644 docs/releasenotes/8.4.0.rst diff --git a/docs/releasenotes/8.4.0.rst b/docs/releasenotes/8.4.0.rst new file mode 100644 index 00000000000..42e57745b5b --- /dev/null +++ b/docs/releasenotes/8.4.0.rst @@ -0,0 +1,41 @@ +8.4.0 +----- + +API Changes +=========== + +Deprecations +^^^^^^^^^^^^ + +ImagePalette size parameter +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``size`` parameter will be removed in Pillow 10.0.0 (2023-01-02). + +Before Pillow 8.3.0, ``ImagePalette`` required palette data of particular lengths by +default, and the size parameter could be used to override that. Pillow 8.3.0 removed +the default required length, also removing the need for the size parameter. + +API Additions +============= + +TODO +^^^^ + +TODO + +Security +======== + +TODO +^^^^ + +TODO + +Other Changes +============= + +TODO +^^^^ + +TODO diff --git a/docs/releasenotes/index.rst b/docs/releasenotes/index.rst index e60d26ec7da..55c51a4010b 100644 --- a/docs/releasenotes/index.rst +++ b/docs/releasenotes/index.rst @@ -14,6 +14,7 @@ expected to be backported to earlier versions. .. toctree:: :maxdepth: 2 + 8.4.0 8.3.1 8.3.0 8.2.0 From ae548381465b5336e2daa5e04f6b9be16acdc7ab Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 Aug 2021 18:38:56 +1000 Subject: [PATCH 064/163] If DPI is invalid, ignore it instead of raising an error --- Tests/images/zero_dpi.jp2 | Bin 0 -> 134081 bytes Tests/test_file_jpeg2k.py | 3 +++ src/PIL/Jpeg2KImagePlugin.py | 10 ++++------ 3 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 Tests/images/zero_dpi.jp2 diff --git a/Tests/images/zero_dpi.jp2 b/Tests/images/zero_dpi.jp2 new file mode 100644 index 0000000000000000000000000000000000000000..079271fc6d86762bf99e838c7c24c7fbb3f4648d GIT binary patch literal 134081 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 literal 0 HcmV?d00001 diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py index 1af73a767cb..779d246e930 100644 --- a/Tests/test_file_jpeg2k.py +++ b/Tests/test_file_jpeg2k.py @@ -155,6 +155,9 @@ def test_load_dpi(): with Image.open("Tests/images/test-card-lossless.jp2") as im: assert im.info["dpi"] == (71.9836, 71.9836) + with Image.open("Tests/images/zero_dpi.jp2") as im: + assert "dpi" not in im.info + def test_layers_type(tmp_path): outfile = str(tmp_path / "temp_layers.jp2") diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index bbcfc0ef9a7..cb774595ebf 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -131,11 +131,8 @@ def _res_to_dpi(num, denom, exp): """Convert JPEG2000's (numerator, denominator, exponent-base-10) resolution, calculated as (num / denom) * 10^exp and stored in dots per meter, to floating-point dots per inch.""" - if num == 0 or denom == 0: - raise SyntaxError( - f"Invalid JP2 resolution information: ({num} / {denom}) * 10^{exp}" - ) - return (254 * num * (10 ** exp)) / (10000 * denom) + if denom != 0: + return num / denom * (10 ** exp) * 0.0254 def _parse_jp2_header(fp): @@ -217,7 +214,8 @@ def _parse_jp2_header(fp): vrcn, vrcd, hrcn, hrcd, vrce, hrce = res.read_fields(">HHHHBB") hres = _res_to_dpi(hrcn, hrcd, hrce) vres = _res_to_dpi(vrcn, vrcd, vrce) - dpi = (hres, vres) + if hres is not None and vres is not None: + dpi = (hres, vres) if size is None or mode is None: raise SyntaxError("Malformed JP2 header") From 3ee5a9b094b83e6ffdfda2bdeab562e64d4c3e82 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 Aug 2021 18:39:35 +1000 Subject: [PATCH 065/163] Stop reading from "res " after all information is extracted --- src/PIL/Jpeg2KImagePlugin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index cb774595ebf..01d2621a17a 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -216,6 +216,7 @@ def _parse_jp2_header(fp): vres = _res_to_dpi(vrcn, vrcd, vrce) if hres is not None and vres is not None: dpi = (hres, vres) + break if size is None or mode is None: raise SyntaxError("Malformed JP2 header") From 0c600f1d88266e310646a8b847888678ccbe9fe0 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 25 Jul 2021 20:36:54 +1000 Subject: [PATCH 066/163] Prevent reading past end of file pointer even if box length allows it --- src/PIL/Jpeg2KImagePlugin.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index 01d2621a17a..448efe4d129 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -33,12 +33,12 @@ def __init__(self, fp, length=-1): self.remaining_in_box = -1 def _can_read(self, num_bytes): + if self.has_length and self.fp.tell() + num_bytes > self.length: + # Outside box: ensure we don't read past the known file length + return False if self.remaining_in_box >= 0: # Inside box contents: ensure read does not go past box boundaries return num_bytes <= self.remaining_in_box - elif self.has_length: - # Outside box: ensure we don't read past the known file length - return self.fp.tell() + num_bytes <= self.length else: return True # No length known, just read From 8828080868160b4270a8dc76c984c39d38c77a93 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 Aug 2021 18:28:43 +1000 Subject: [PATCH 067/163] Removed unreachable code --- src/PIL/Jpeg2KImagePlugin.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index 448efe4d129..6f25c339055 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -154,9 +154,6 @@ def _parse_jp2_header(fp): if reader.read_fields(">4s")[0] == b"jpx ": mimetype = "image/jpx" - if header is None: - raise SyntaxError("Could not find JP2 header") - size = None mode = None bpc = None From 8045ecceefd5ca9cecbd0906f6bdf8ec73c98796 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sun, 1 Aug 2021 19:01:43 +1000 Subject: [PATCH 068/163] Added tests --- Tests/images/expected_to_read.jp2 | Bin 0 -> 134081 bytes Tests/images/invalid_header_length.jp2 | Bin 0 -> 134081 bytes Tests/images/not_enough_data.jp2 | Bin 0 -> 134081 bytes Tests/test_file_jpeg2k.py | 16 +++++++++++++++- 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 Tests/images/expected_to_read.jp2 create mode 100644 Tests/images/invalid_header_length.jp2 create mode 100644 Tests/images/not_enough_data.jp2 diff --git a/Tests/images/expected_to_read.jp2 b/Tests/images/expected_to_read.jp2 new file mode 100644 index 0000000000000000000000000000000000000000..d8029a0d3a0f3b08f67127143d68997731a64db7 GIT binary patch literal 134081 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