diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 54cc45249..a7e574ba5 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -78,13 +78,13 @@ def test_strategy(): expected_one = im.convert("RGB") try: - GifImagePlugin.PALETTE_TO_RGB = GifImagePlugin.ModeStrategy.ALWAYS + GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_ALWAYS with Image.open("Tests/images/chi.gif") as im: assert im.mode == "RGB" assert_image_equal(im, expected_zero) - GifImagePlugin.PALETTE_TO_RGB = ( - GifImagePlugin.ModeStrategy.DIFFERENT_PALETTE_ONLY + GifImagePlugin.LOADING_STRATEGY = ( + GifImagePlugin.LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY ) # Stay in P mode with only a global palette with Image.open("Tests/images/chi.gif") as im: @@ -101,7 +101,7 @@ def test_strategy(): im.seek(1) assert im.mode == "RGB" finally: - GifImagePlugin.PALETTE_TO_RGB = GifImagePlugin.ModeStrategy.AFTER_FIRST + GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_FIRST def test_optimize(): @@ -429,10 +429,10 @@ def test_dispose_background_transparency(): @pytest.mark.parametrize( - "mode_strategy, expected_colors", + "loading_strategy, expected_colors", ( ( - GifImagePlugin.ModeStrategy.AFTER_FIRST, + GifImagePlugin.LoadingStrategy.RGB_AFTER_FIRST, ( (2, 1, 2), ((0, 255, 24, 255), (0, 0, 255, 255), (0, 255, 24, 255)), @@ -440,7 +440,7 @@ def test_dispose_background_transparency(): ), ), ( - GifImagePlugin.ModeStrategy.DIFFERENT_PALETTE_ONLY, + GifImagePlugin.LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY, ( (2, 1, 2), (0, 1, 0), @@ -449,8 +449,8 @@ def test_dispose_background_transparency(): ), ), ) -def test_transparent_dispose(mode_strategy, expected_colors): - GifImagePlugin.PALETTE_TO_RGB = mode_strategy +def test_transparent_dispose(loading_strategy, expected_colors): + GifImagePlugin.LOADING_STRATEGY = loading_strategy try: with Image.open("Tests/images/transparent_dispose.gif") as img: for frame in range(3): @@ -459,7 +459,7 @@ def test_transparent_dispose(mode_strategy, expected_colors): color = img.getpixel((x, 0)) assert color == expected_colors[frame][x] finally: - GifImagePlugin.PALETTE_TO_RGB = GifImagePlugin.ModeStrategy.AFTER_FIRST + GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_FIRST def test_dispose_previous(): diff --git a/docs/handbook/image-file-formats.rst b/docs/handbook/image-file-formats.rst index 630956250..295d62809 100644 --- a/docs/handbook/image-file-formats.rst +++ b/docs/handbook/image-file-formats.rst @@ -118,7 +118,7 @@ every ``P`` frame is converted to ``RGB`` or ``RGBA`` mode, there is a setting available:: from PIL import GifImagePlugin - GifImagePlugin.PALETTE_TO_RGB = GifImagePlugin.ModeStrategy.ALWAYS + GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_ALWAYS GIF frames do not always contain individual palettes however. If there is only a global palette, then all of the colors can fit within ``P`` mode. If you would @@ -126,7 +126,7 @@ prefer the frames to be kept as ``P`` in that case, there is also a setting available:: from PIL import GifImagePlugin - GifImagePlugin.PALETTE_TO_RGB = GifImagePlugin.ModeStrategy.DIFFERENT_PALETTE_ONLY + GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY The :py:meth:`~PIL.Image.open` method sets the following :py:attr:`~PIL.Image.Image.info` properties: diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 1be47c7b7..cee4be068 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -36,16 +36,16 @@ from ._binary import o8 from ._binary import o16le as o16 -class ModeStrategy(IntEnum): +class LoadingStrategy(IntEnum): """.. versionadded:: 9.1.0""" - AFTER_FIRST = 0 - ALWAYS = 1 - DIFFERENT_PALETTE_ONLY = 2 + RGB_AFTER_FIRST = 0 + RGB_AFTER_DIFFERENT_PALETTE_ONLY = 1 + RGB_ALWAYS = 2 #: .. versionadded:: 9.1.0 -PALETTE_TO_RGB = ModeStrategy.AFTER_FIRST +LOADING_STRATEGY = LoadingStrategy.RGB_AFTER_FIRST # -------------------------------------------------------------------- # Identify/read GIF files @@ -292,7 +292,9 @@ class GifImageFile(ImageFile.ImageFile): self._frame_palette = palette or self.global_palette if frame == 0: if self._frame_palette: - self.mode = "RGB" if PALETTE_TO_RGB == ModeStrategy.ALWAYS else "P" + self.mode = ( + "RGB" if LOADING_STRATEGY == LoadingStrategy.RGB_ALWAYS else "P" + ) else: self.mode = "L" @@ -304,7 +306,10 @@ class GifImageFile(ImageFile.ImageFile): else: self._frame_transparency = frame_transparency if self.mode == "P": - if PALETTE_TO_RGB != ModeStrategy.DIFFERENT_PALETTE_ONLY or palette: + if ( + LOADING_STRATEGY != LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY + or palette + ): self.pyaccess = None if "transparency" in self.info: self.im.putpalettealpha(self.info["transparency"], 0) @@ -412,7 +417,7 @@ class GifImageFile(ImageFile.ImageFile): def load_end(self): if self.__frame == 0: - if self.mode == "P" and PALETTE_TO_RGB == ModeStrategy.ALWAYS: + if self.mode == "P" and LOADING_STRATEGY == LoadingStrategy.RGB_ALWAYS: self.mode = "RGB" self.im = self.im.convert("RGB", Image.Dither.FLOYDSTEINBERG) return