【问题标题】:Python PIL 0.5 opacity, transparency, alphaPython PIL 0.5 不透明度、透明度、阿尔法
【发布时间】:2014-09-04 01:04:46
【问题描述】:

有没有办法让图片变成半透明?

伪代码是这样的:

from PIL import Image
image = Image.open('image.png')
image = alpha(image, 0.5)

我用谷歌搜索了几个小时,但找不到任何有用的东西。

【问题讨论】:

  • 答案一定要用PIL吗?我不相信有办法用那个特定的模块来实现这一点。
  • reduce_opacity() in this question 有帮助吗?

标签: python transparency python-imaging-library opacity alpha


【解决方案1】:

你能做这样的事情吗?

from PIL import Image
image = Image.open('image.png') #open image
image = image.convert("RGBA")  #convert to RGBA
rgb = image.getpixel(x,y) #Get the rgba value at coordinates x,y
rgb[3] = int(rgb[3] / 2) or you could do rgb[3] = 50 maybe? #set alpha to half somehow
image.putpixel((x,y), rgb) #put back the modified reba values at same pixel coordinates

绝对不是最有效的做事方式,但它可能会奏效。我在浏览器中编写了代码,所以它可能不会出错,但希望它能给你一个想法。

编辑:刚刚注意到这个问题有多老了。无论如何留下答案以供将来帮助。 :)

【讨论】:

    【解决方案2】:

    我把Pecan的回答和cr333的这个问题放在一起:

    Using PIL to make all white pixels transparent?

    ...并想出了这个:

    from PIL import Image
    
    opacity_level = 170 # Opaque is 255, input between 0-255
    
    img = Image.open('img1.png')
    img = img.convert("RGBA")
    datas = img.getdata()
    
    newData = []
    for item in datas:
        newData.append((0, 0, 0, opacity_level))
    else:
        newData.append(item)
    
    img.putdata(newData)
    img.save("img2.png", "PNG")
    

    在我的例子中,我有黑色背景的文本,只想要背景半透明,在这种情况下:

    from PIL import Image
    
    opacity_level = 170 # Opaque is 255, input between 0-255
    
    img = Image.open('img1.png')
    img = img.convert("RGBA")
    datas = img.getdata()
    
    newData = []
    for item in datas:
        if item[0] == 0 and item[1] == 0 and item[2] == 0:
            newData.append((0, 0, 0, opacity_level))
        else:
            newData.append(item)
    
    img.putdata(newData)
    img.save("img2.png", "PNG")
    

    【讨论】:

      【解决方案3】:

      我只是自己做的......尽管我的代码可能有点奇怪......但它工作正常。所以我在这里分享一下。希望它可以帮助任何人。 =)

      想法:透明图片意味着较低的 alpha,它是元组中的第 4 个元素。

      我的框架代码:

      from PIL import Image 
      img=open(image)
      img=img.convert('RGBA')  #you can make sure your pic is in the right mode by check img.mode
      data=img.getdata()  #you'll get a list of tuples
      newData=[]
      for a in data:
          a=a[:3] #you'll get your tuple shorten to RGB
          a=a+(100,) #change the 100 to any transparency number you like between (0,255)
          newData.append(a)
      img.putdata(newData) #you'll get your new img ready
      img.save(filename.filetype)
      

      我没有找到正确的命令来自动完成这项工作,所以我自己写了这个。希望它会再次帮助。呵呵

      【讨论】:

        【解决方案4】:

        我意识到这个问题真的很老了,但是在当前版本的 Pillow (v4.2.1) 中,有一个名为 putalpha 的函数。这对我来说似乎工作得很好。我不知道是否适用于需要更改 alpha 的所有情况,但它确实有效。它为图像中的每个像素设置 alpha 值。看来,尽管您可以使用掩码:http://www.leancrew.com/all-this/2013/11/transparency-with-pil/

        像这样使用putalpha

        from PIL import Image
        img = Image.open(image)
        img.putalpha(127)  # Half alpha; alpha argument must be an int
        img.save(dest)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-15
          • 2011-08-27
          • 1970-01-01
          • 1970-01-01
          • 2018-01-23
          • 1970-01-01
          • 2014-01-05
          相关资源
          最近更新 更多