Skip to content

Commit

Permalink
Merge pull request #6647 from radarhere/rgb2lab
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Oct 19, 2022
2 parents 87a9d71 + fcd3eef commit bb20167
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
11 changes: 11 additions & 0 deletions Tests/test_image_convert.py
Expand Up @@ -248,6 +248,17 @@ def test_p2pa_palette():
assert im_pa.getpalette() == im.getpalette()


@pytest.mark.parametrize("mode", ("RGB", "RGBA", "RGBX"))
def test_rgb_lab(mode):
im = Image.new(mode, (1, 1))
converted_im = im.convert("LAB")
assert converted_im.getpixel((0, 0)) == (0, 128, 128)

im = Image.new("LAB", (1, 1), (255, 0, 0))
converted_im = im.convert(mode)
assert converted_im.getpixel((0, 0))[:3] == (0, 255, 255)


def test_matrix_illegal_conversion():
# Arrange
im = hopper("CMYK")
Expand Down
13 changes: 13 additions & 0 deletions src/PIL/Image.py
Expand Up @@ -1042,6 +1042,19 @@ def convert_transparency(m, v):
warnings.warn("Couldn't allocate palette entry for transparency")
return new

if "LAB" in (self.mode, mode):
other_mode = mode if self.mode == "LAB" else self.mode
if other_mode in ("RGB", "RGBA", "RGBX"):
from . import ImageCms

srgb = ImageCms.createProfile("sRGB")
lab = ImageCms.createProfile("LAB")
profiles = [lab, srgb] if self.mode == "LAB" else [srgb, lab]
transform = ImageCms.buildTransform(
profiles[0], profiles[1], self.mode, mode
)
return transform.apply(self)

# colorspace conversion
if dither is None:
dither = Dither.FLOYDSTEINBERG
Expand Down

0 comments on commit bb20167

Please sign in to comment.