Сообщить об ошибке.

Функция Image.eval() модуля Pillow в Python

Попиксельное изменение изображения модулем Pillow

Синтаксис:

from PIL import Image 

Image.eval(image, func)

Параметры:

  • image - dходное изображение.
  • func - вызываемый объект, принимающий один целочисленный аргумент.

Возвращаемое значение:

  • Объект изображения Image.

Описание:

Функция Image.eval() модуля Pillow применяет функцию fn (которая принимает один аргумент) к каждому пикселю данного изображения.

Если изображение содержит более одного канала, то одна и та же функция применяется к каждому каналу. Обратите внимание, что функция оценивается один раз для каждого возможного значения пикселя, поэтому нельзя использовать случайные компоненты или другие генераторы.

Пример использования:

from PIL import Image
from urllib.request import urlopen

# откроем логотип Python по ссылке
url = 'https://www.python.org/static/img/python-logo.png'
with Image.open(urlopen(url)) as logo:
    # сохраним для сравнения
    logo.save('python-logo.png')
    
    # применим метод Image.eval()  
    # с lambda-функцией: lambda x: 254 - x * 15
    img = Image.eval(logo, lambda x: 255 - x)
    # смотрим что получилось
    img.save('python-logo_eval_RGB.png')
    
    # теперь разложим изображение на каналы
    r, g, b, a = logo.split()
    # применим метод Image.eval()  
    # для канала R с lambda-функцией
    r = Image.eval(r, lambda x: 255 if x > 200 else 0)
    # объединим каналы
    img = Image.merge('RGB', (r, g, b))
    # смотрим что получилось
    img.save('python-logo_eval_R.png')

    # применим к черно-белому изображению
    img = logo.convert('L')
    img = Image.eval(img, lambda x: 255 if x > 200 else 0)
    # смотрим что получилось
    img.save('python-logo_eval_L.png')