Изменить насыщенность с помощью Imagekit, PIL или Pillow?

Как мне изменить насыщенность изображения с помощью PIL или Pillow? Предпочтительно, чтобы я мог использовать решение вместе с пакетом django-imagekit. Причина, по которой мне нужно изменить насыщенность, заключается в том, чтобы создать эффект, при котором, когда пользователь наводит курсор на черно-белое изображение, оно превращается в цветное.


person antonagestam    schedule 17.04.2013    source источник
comment
Подушка это PIL, на самом деле.   -  person Martijn Pieters    schedule 18.04.2013


Ответы (3)


Если вы используете django-imagekit, вы можете просто использовать встроенный процессор Adjust:

from imagekit.processors import Adjust
Adjust(color=0.5)

Под капотом это будет делать именно то, что @abarnert рекомендуется.

person matthewwithanm    schedule 28.06.2013
comment
Спасибо @matthewwithanm. Это именно то, что я искал. Я думаю, что тогда я создал свой собственный процессор, что было хорошей практикой, но я был почти уверен, что он должен быть где-то в imagekit. - person antonagestam; 01.07.2013

Вы, вероятно, хотите ImageEnhance.Color.

img = PIL.Image.open('bus.png')
converter = PIL.ImageEnhance.Color(img)
img2 = converter.enhance(0.5)

Это дает изображение с половиной «цвета» оригинала. Это не совсем то же самое, что половинная насыщенность (потому что половинная или двойная насыщенность обычно приводит к недоливу или переполнению), но, вероятно, это то, что вам на самом деле нужно большую часть времени. Как говорится в документах, это работает как ручка «цвет» на телевизоре.

Вот пример одного и того же изображения с цветом 0,5, 1,0 и 2,0: введите здесь описание изображениявведите здесь описание изображения   введите здесь описание изображения

person abarnert    schedule 17.04.2013

Если вам нужно изображение в оттенках серого, просто преобразуйте его в режим L (яркость):

greyscale = rgba_image.convert('L')

Применив это к моему ниндзя:

милый ниндзямилый ниндзя в оттенках серого

Если вам нужны промежуточные шаги, вам нужно преобразовать значение RGB в HLS или HSV, отрегулировать насыщенность, а затем снова преобразовать его обратно в RGB. Для этого вы можете использовать colorsys или адаптировать это numpy решение; Я ожидаю, что последний будет работать лучше.

person Martijn Pieters    schedule 17.04.2013
comment
Или сделайте версию с режимом яркости и смешайте ее с оригиналом. - person kindall; 18.04.2013