0

您可能知道 Photoshop 等专业图像编辑程序的“颜色到透明度”效果。这个效果是怎么做的?我想用 Python 以编程方式为我的图像添加一些透明度(以及测试 PIL,因为我可以检查生成的图像)​​。这种效果将用于一些分形的东西,所以这是我当前的代码:

i = "i.png"
o = "o.png"

key = (0, 0, 0, 255)

from PIL import Image as I

_i = I.open(i)
_ii = _i.load()

_o = I.new("RGBA", _i.size)
_oo = _o.load()

for x in range(0, _i.size[0]): 
    for y in range(0, _i.size[1]): 
        col = list(_ii[x, y])
        for i in range(0, 4): 
            col[i] = abs(col[i] - key[i])
        _oo[x, y] = tuple(col)

_o.save(o)

我想减去这两种颜色,但我最终得到黑色图像(丢失所有 alpha)。另一个想法是将原始颜色加倍并检查键是否较低,例如反向混合两种颜色。

那么,你有什么想法吗?

编辑

示例

这种效果是通过 GIMP 使用它的“颜色到透明度”功能完成的。我选择#FFF 是透明的,而 GIMP 以某种方式将白色变为透明,一开始没有忽略像素的颜色。这就是我真正想要做的,使图像中的颜色透明,就像在图像中一样。

(我在第二张图片中添加了黑色背景,所以你知道它是透明的。原始图像就像第一张一样,白色背景,略带绿色的周围,黑色中心)

4

1 回答 1

0

如果您想用“透明”像素替换给定颜色的像素,您必须 (1) 测试给定像素是否具有所需的颜色 (2) 通过将 alpha 设置为 0 将其设置为“透明”。这样的事情会做的伎俩:

for x in range(0, _i.size[0]): 
    for y in range(0, _i.size[1]): 
        col = list(_ii[x, y])
        if col[0:3] == my_key_color[0:3]:
            _oo[x,y] = col[0:3]+(0,) # keep RGB, set A to 0
        else:
            _oo[x,y] = col

请注意,这是一个非常基本的解决方案,其中像素要么完全透明,要么保持原样。如果你在寻找更“专业”的效果,你可以稍微细化一下……

于 2013-06-16T18:31:19.287 回答