PIL使用eval函数检查它所在的像素

Nic*_*ick 3 python rgb transparency pixel python-imaging-library

有没有办法使用evalPIL中的函数来遍历所有像素,同时检查每个值是什么?程序通过一个图像来查看每个像素是否是某个rgb,如果是,则它会将该像素转换为透明度.evalPIL中的函数似乎可以完成这项工作,但是我的转换像素的函数可以检查它所在像素的值吗?提前致谢.

sam*_*ias 11

更新:啊,我明白你想做什么.这是仅使用PIL的示例.它将所有白色像素转换为红色且50%alpha:

import Image

img = Image.open('stack.png').convert('RGBA')
width, _ = img.size
for i, px in enumerate(img.getdata()):
    if px[:3] == (255, 255, 255):
        y = i / width
        x = i % width
        img.putpixel((x, y), (255, 0, 0, 127))

img.save('stack-red.png')
Run Code Online (Sandbox Code Playgroud)

原版的
转换

原始答案:是的,该Image.eval()功能允许您传入一个评估每个像素的函数,并让您确定一个新的像素值:

import Image
img1 = Image.open('foo.png')
# replace dark pixels with black
img2 = Image.eval(img1, lambda px: 0 if px <= 64 else px)
Run Code Online (Sandbox Code Playgroud)

  • 新的像素值?嗯,我并不完全理解这个函数,抱歉...不过我可以从中得到什么,它会检查像素是否小于 64,然后如果是,则将其转换为零?我对吗?如果是这样,您将如何将像素值设置为从绿色变为绿色?如何找到图像的“像素值”? (2认同)