mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-27 01:34:24 +03:00
Merge pull request #5564 from radarhere/getcolor
Do not use background or transparency index for new color
This commit is contained in:
commit
1b74bddfde
|
@ -49,6 +49,29 @@ def test_getcolor():
|
|||
palette.getcolor("unknown")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"index, palette",
|
||||
[
|
||||
# Test when the palette is not full
|
||||
(0, ImagePalette.ImagePalette()),
|
||||
# Test when the palette is full
|
||||
(255, ImagePalette.ImagePalette("RGB", list(range(256)) * 3)),
|
||||
],
|
||||
)
|
||||
def test_getcolor_not_special(index, palette):
|
||||
im = Image.new("P", (1, 1))
|
||||
|
||||
# Do not use transparency index as a new color
|
||||
im.info["transparency"] = index
|
||||
index1 = palette.getcolor((0, 0, 0), im)
|
||||
assert index1 != index
|
||||
|
||||
# Do not use background index as a new color
|
||||
im.info["background"] = index1
|
||||
index2 = palette.getcolor((0, 0, 1), im)
|
||||
assert index2 not in (index, index1)
|
||||
|
||||
|
||||
def test_file(tmp_path):
|
||||
|
||||
palette = ImagePalette.ImagePalette("RGB", list(range(256)) * 3)
|
||||
|
|
|
@ -118,11 +118,19 @@ class ImagePalette:
|
|||
if not isinstance(self.palette, bytearray):
|
||||
self._palette = bytearray(self.palette)
|
||||
index = len(self.palette) // 3
|
||||
special_colors = ()
|
||||
if image:
|
||||
special_colors = (
|
||||
image.info.get("background"),
|
||||
image.info.get("transparency"),
|
||||
)
|
||||
while index in special_colors:
|
||||
index += 1
|
||||
if index >= 256:
|
||||
if image:
|
||||
# Search for an unused index
|
||||
for i, count in reversed(list(enumerate(image.histogram()))):
|
||||
if count == 0:
|
||||
if count == 0 and i not in special_colors:
|
||||
index = i
|
||||
break
|
||||
if index >= 256:
|
||||
|
|
Loading…
Reference in New Issue
Block a user