Skip to content

Commit 597dff7

Browse files
authored
Merge pull request #1 from radarhere/fix-padding
Improved palette handling in ImageOps
2 parents d88200e + 3c42b27 commit 597dff7

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

Tests/test_imageops.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,21 @@ def test_pad():
130130
)
131131

132132

133+
@pytest.mark.parametrize("mode", ("P", "PA"))
134+
def test_palette(mode):
135+
im = hopper(mode)
136+
137+
# Expand
138+
expanded_im = ImageOps.expand(im)
139+
assert_image_equal(im.convert("RGB"), expanded_im.convert("RGB"))
140+
141+
# Pad
142+
padded_im = ImageOps.pad(im, (256, 128), centering=(0, 0))
143+
assert_image_equal(
144+
im.convert("RGB"), padded_im.convert("RGB").crop((0, 0, 128, 128))
145+
)
146+
147+
133148
def test_pil163():
134149
# Division by zero in equalize if < 255 pixels in image (@PIL163)
135150

src/PIL/ImageOps.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import operator
2222
import re
2323

24-
from . import Image
24+
from . import Image, ImagePalette
2525

2626
#
2727
# helpers
@@ -291,9 +291,8 @@ def pad(image, size, method=Image.Resampling.BICUBIC, color=None, centering=(0.5
291291
out = resized
292292
else:
293293
out = Image.new(image.mode, size, color)
294-
palette = image.palette.copy()
295-
if palette:
296-
out.putpalette(palette)
294+
if resized.palette:
295+
out.putpalette(resized.getpalette())
297296
if resized.width != size[0]:
298297
x = int((size[0] - resized.width) * max(0, min(centering[0], 1)))
299298
out.paste(resized, (x, 0))
@@ -399,9 +398,8 @@ def expand(image, border=0, fill=0):
399398
width = left + image.size[0] + right
400399
height = top + image.size[1] + bottom
401400
color = _color(fill, image.mode)
402-
if image.mode == "P" and image.palette:
403-
image.load()
404-
palette = image.palette.copy()
401+
if image.palette:
402+
palette = ImagePalette.ImagePalette(palette=image.getpalette())
405403
if isinstance(color, tuple):
406404
color = palette.getcolor(color)
407405
else:

0 commit comments

Comments
 (0)