diff --git a/Tests/test_file_icns.py b/Tests/test_file_icns.py index 8ff59161f..b9b818506 100644 --- a/Tests/test_file_icns.py +++ b/Tests/test_file_icns.py @@ -93,21 +93,11 @@ def test_sizes() -> None: with Image.open(TEST_FILE) as im: assert isinstance(im, IcnsImagePlugin.IcnsImageFile) for w, h, r in im.info["sizes"]: - wr = w * r - hr = h * r - with pytest.warns( - DeprecationWarning, match=r"Setting size to \(width, height, scale\)" - ): - im.size = (w, h, r) - im.load() - assert im.mode == "RGBA" - assert im.size == (wr, hr) - # Test using load() with scale im.size = (w, h) im.load(scale=r) assert im.mode == "RGBA" - assert im.size == (wr, hr) + assert im.size == (w * r, h * r) # Check that we cannot load an incorrect size with pytest.raises(ValueError): diff --git a/docs/deprecations.rst b/docs/deprecations.rst index 772e88147..e2c74f2a2 100644 --- a/docs/deprecations.rst +++ b/docs/deprecations.rst @@ -32,14 +32,6 @@ vulnerability introduced in FreeType 2.6 (:cve:`2020-15999`). .. _2.10.4: https://sourceforge.net/projects/freetype/files/freetype2/2.10.4/ -ICNS (width, height, scale) sizes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. deprecated:: 11.0.0 - -Setting an ICNS image size to ``(width, height, scale)`` before loading has been -deprecated. Instead, ``load(scale)`` can be used. - ExifTags.IFD.Makernote ^^^^^^^^^^^^^^^^^^^^^^ @@ -189,6 +181,14 @@ ImageDraw.getdraw hints parameter The ``hints`` parameter in :py:meth:`~PIL.ImageDraw.getdraw()` has been removed. +ICNS (width, height, scale) sizes +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. deprecated:: 11.0.0 + +Setting an ICNS image size to ``(width, height, scale)`` before loading has been +removed. Instead, ``load(scale)`` can be used. + Image isImageType() ^^^^^^^^^^^^^^^^^^^ diff --git a/src/PIL/IcnsImagePlugin.py b/src/PIL/IcnsImagePlugin.py index 5a88429e5..197ea7a2b 100644 --- a/src/PIL/IcnsImagePlugin.py +++ b/src/PIL/IcnsImagePlugin.py @@ -25,7 +25,6 @@ import sys from typing import IO from . import Image, ImageFile, PngImagePlugin, features -from ._deprecate import deprecate enable_jpeg2k = features.check_codec("jpg_2000") if enable_jpeg2k: @@ -275,34 +274,25 @@ class IcnsImageFile(ImageFile.ImageFile): self.best_size[1] * self.best_size[2], ) - @property # type: ignore[override] - def size(self) -> tuple[int, int] | tuple[int, int, int]: + @property + def size(self) -> tuple[int, int]: return self._size @size.setter - def size(self, value: tuple[int, int] | tuple[int, int, int]) -> None: - if len(value) == 3: - deprecate("Setting size to (width, height, scale)", 12, "load(scale)") - if value in self.info["sizes"]: - self._size = value # type: ignore[assignment] + def size(self, value: tuple[int, int]) -> None: + # Check that a matching size exists, + # or that there is a scale that would create a size that matches + for size in self.info["sizes"]: + simple_size = size[0] * size[2], size[1] * size[2] + scale = simple_size[0] // value[0] + if simple_size[1] / value[1] == scale: + self._size = value return - else: - # Check that a matching size exists, - # or that there is a scale that would create a size that matches - for size in self.info["sizes"]: - simple_size = size[0] * size[2], size[1] * size[2] - scale = simple_size[0] // value[0] - if simple_size[1] / value[1] == scale: - self._size = value - return msg = "This is not one of the allowed sizes of this image" raise ValueError(msg) def load(self, scale: int | None = None) -> Image.core.PixelAccess | None: - if scale is not None or len(self.size) == 3: - if scale is None and len(self.size) == 3: - scale = self.size[2] - assert scale is not None + if scale is not None: width, height = self.size[:2] self.size = width * scale, height * scale self.best_size = width, height, scale