Нет, eval
не будет передавать кортеж RGB в функцию. Он отображает функцию для каждой группы. Однако вы можете обработать каждую полосу, используя eval
, а затем использовать операцию ImageChops
, чтобы логически объединить полосы и получить маску, которая будет зависеть от пикселя-кортежа.
Кстати, это можно сделать намного более аккуратно и эффективно в NumPy, если вы так склонны.
import numpy as np
import Image
import ImageChops
im_and = ImageChops.lighter
im = Image.open('test.png')
a = np.array(im)
R,G,B,A = im.split()
color_matches = []
for level,band in zip((255,255,255), (R,G,B)):
b = Image.eval(band, lambda px: 255-(255*(px==level)))
color_matches.append(b)
r,g,b = color_matches
mask = im_and(r, im_and(g, b))
im.putalpha(mask)
im.save('test2.png')