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')