Renamed setting

This commit is contained in:
Andrew Murray 2022-03-29 21:26:29 +11:00
parent 33022eef16
commit e22a4395d3
3 changed files with 25 additions and 20 deletions

View File

@ -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():

View File

@ -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:

View File

@ -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