【问题标题】:How to set alpha value of a pixel in Python如何在 Python 中设置像素的 alpha 值
【发布时间】:2015-04-29 13:29:13
【问题描述】:

我正在尝试编辑image,以使所有白色像素都转换为透明像素(alpha 值为 0)。基本上我想摆脱背景。

我知道图像文件的 im.putpixel 方法,但根据我的实验,这不允许我设置 alpha 值。我尝试了以下方法:

for x in range(90):
    for y in range(80, 90):
        im.putpixel((x, y), (0, 0, 0, 0))

只是在指定区域变黑,而不是透明度。有没有办法改变像素的 alpha 值?如果有,怎么做?

【问题讨论】:

    标签: python image pixel alpha


    【解决方案1】:

    听起来您正在使用 python 图像库 (PIL)。

    如果是这样,您可以这样做:

    from PIL import Image
    image = Image.open("<path to image file>").convert('RGBA')
    pixeldata = list(image.getdata())
    
    for i,pixel in enumerate(pixeldata):
        if pixel[:3] == (255,255,255):
            pixeldata[i] = (255,255,255,0)
    
    image.putdata(pixeldata)
    image.save("output.png")
    

    这应该会生成如下内容:

    当然,这可能不是您想要的。您可以做的一件事是在颜色接近白色而不是完全白色时将像素设置为透明。您可以定义一个函数,如

    def almostEquals(a,b,thres=5):
        return all(abs(a[i]-b[i])<thres for i in range(len(a)))
    

    并将颜色检查线替换为:

    if almostEquals(pixel[:3], (255,255,255):
    

    为了得到这样的东西

    仍有一些光晕/边框伪影,但更好。

    在您的情况下,使用简单的黑白图像,您可能只想根据像素的白度设置 Alpha(我经常在 Photoshop 中这样做)。您可以使用 3 个颜色通道之一,甚至可以使用平均值。比如:

    for i,pixel in enumerate(pixeldata):
        avg = int(sum(pixel[:3])/3.0)
        pixeldata[i] = (pixel[0],pixel[1],pixel[2],255-avg)
    

    会给你这样的结果:

    仍然是一个小光环,因为我们仍然只是更改 alpha 值,但要好得多。要解决这个问题,您也可以将所有像素设置为黑色,而不仅仅是修改 alpha。

    无论如何,一个简单问题的长答案,但希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      试试这个:

      for x in range(90):
          for y in range(80, 90):
              pixels[x, y] = (0, 0, 0, 0)
      

      【讨论】:

      • 这个游戏给我一个全黑的图像——但我不知道im.show() 是否就是这样工作的。将其设置为pixels[x, y] = (255, 255, 255, 0) 使其变为白色,我可以肯定地说它不透明。
      • 对于透明度,您希望更改颜色的不透明度
      • 正确。我该怎么做?有没有im的方法可以让我设置图片的不透明度?
      • python 中没有任何东西可以处理不透明度。但是,有许多外部库可以这样做。
      • 好的 - 我去看看。谢谢!
      猜你喜欢
      • 2013-04-18
      • 2018-12-12
      • 1970-01-01
      • 2018-05-28
      • 2013-05-30
      • 2020-11-23
      • 1970-01-01
      • 2022-05-21
      • 1970-01-01
      相关资源
      最近更新 更多