Есть ли способ конвертировать изображение в HSL с помощью подушки? - PullRequest
0 голосов
/ 03 марта 2019

Есть ли способ преобразования изображения в HSL с помощью Pillow в Python?

В идеале я хотел бы иметь возможность открыть JPEG, преобразовать его в HSL, изменить значения HSL, преобразовать обратно в RGBи сохраните.

Единственный способ вычислить - это использовать colorsys.rgb_to_hls для каждого пикселя.

1 Ответ

0 голосов
/ 03 марта 2019

Подушка (5.4.1) не поддерживает преобразование RGB в HSL:

Python 3.7.2 (default, Dec 27 2018, 07:35:52)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from PIL import Image
>>> im = Image.open("Tests/images/hopper.png")
>>> hsl = im.convert("HSL")
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/PIL/Image.py", line 1030, in convert
    im = self.im.convert(mode, dither)
ValueError: conversion from RGB to HSL not supported

Однако, если вы можете работать с ним, поддерживается RGB в HSV:

from PIL import Image

print("Open a JPEG")
im = Image.open("Tests/images/hopper.png")
px = im.load()
print(im.mode)  # "RGB"
print(px[0, 0])  # (20, 21, 67) ~= navy

print("Convert it to HSV")
hsv = im.convert("HSV")
px = hsv.load()
print(hsv.mode)  # "HSV"
print(px[0, 0])  # (169, 178, 67) ~= navy

print("Change an HSV value")
px[0, 0] = (0, 255, 255)  # red
print(px[0, 0])  # (0, 255, 255) == red

print("Convert back to RGB and save")
im2 = hsv.convert("RGB")
px = im2.load()
print(im2.mode)  # "RGB"
print(px[0, 0])  # (255, 0, 0) == red
im2.save("out.png")
...