【问题标题】:Color to transparency - programmatically颜色到透明度 - 以编程方式
【发布时间】:2013-06-12 17:25:01
【问题描述】:

您可能知道 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 以某种方式将白色变为透明,一开始没有忽略像素的颜色。这就是我真正想要做的,使图像中的颜色透明,就像在图像中一样。

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

【问题讨论】:

  • 查看这篇维基百科文章:en.wikipedia.org/wiki/…
  • 这篇文章我读了好几遍,但实际上我没有明白。可能是因为我在编码之夜后很累......你能帮我解决这个问题吗?

标签: python image-processing python-imaging-library


【解决方案1】:

如果您想用“透明”像素替换给定颜色的像素,您必须 (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

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

【讨论】:

  • 谢谢,有帮助。但这实际上会输出带有边缘的图像。我的想法是为具有几乎相同颜色的像素添加透明度(不是 alpha = 0,但 alpha 几乎为 0)。我将编辑我的问题并添加一些图片,以指出我的意思。
猜你喜欢
  • 2013-06-18
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 2019-04-11
相关资源
最近更新 更多