mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 01:46:18 +03:00
Do not use background or transparency index for new color
This commit is contained in:
parent
4b4e5f0e2c
commit
eab2b17d64
|
@ -49,6 +49,25 @@ def test_getcolor():
|
|||
palette.getcolor("unknown")
|
||||
|
||||
|
||||
def test_getcolor_not_special():
|
||||
im = Image.new("P", (1, 1))
|
||||
for index, palette in {
|
||||
# Test when the palette is not full
|
||||
0: ImagePalette.ImagePalette(),
|
||||
# Test when the palette is full
|
||||
255: ImagePalette.ImagePalette("RGB", list(range(256)) * 3),
|
||||
}.items():
|
||||
# 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