Skip to content

Commit 8c42abd

Browse files
authored
Allow RGBA palettes to work with ImageOps.expand() (#9138)
2 parents c22e7af + 35c9230 commit 8c42abd

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

Tests/test_imageops.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,21 @@ def test_palette(mode: str) -> None:
186186
)
187187

188188

189+
def test_rgba_palette() -> None:
190+
im = Image.new("P", (1, 1))
191+
192+
red = (255, 0, 0, 255)
193+
translucent_black = (0, 0, 0, 127)
194+
im.putpalette(red + translucent_black, "RGBA")
195+
196+
expanded_im = ImageOps.expand(im, 1, 1)
197+
198+
palette = expanded_im.palette
199+
assert palette is not None
200+
assert palette.mode == "RGBA"
201+
assert expanded_im.convert("RGBA").getpixel((0, 0)) == translucent_black
202+
203+
189204
def test_pil163() -> None:
190205
# Division by zero in equalize if < 255 pixels in image (@PIL163)
191206

src/PIL/ImageOps.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,14 +499,15 @@ def expand(
499499
height = top + image.size[1] + bottom
500500
color = _color(fill, image.mode)
501501
if image.palette:
502-
palette = ImagePalette.ImagePalette(palette=image.getpalette())
502+
mode = image.palette.mode
503+
palette = ImagePalette.ImagePalette(mode, image.getpalette(mode))
503504
if isinstance(color, tuple) and (len(color) == 3 or len(color) == 4):
504505
color = palette.getcolor(color)
505506
else:
506507
palette = None
507508
out = Image.new(image.mode, (width, height), color)
508509
if palette:
509-
out.putpalette(palette.palette)
510+
out.putpalette(palette.palette, mode)
510511
out.paste(image, (left, top))
511512
return out
512513

0 commit comments

Comments
 (0)