【问题标题】:PIL - Prevent premultiplied alpha channelPIL - 防止预乘 Alpha 通道
【发布时间】:2016-12-28 10:09:41
【问题描述】:

我正在尝试在图像上添加 alpha 通道,但结果不是预期的:

from PIL import Image
baseImage = Image.open('baseimage.png').convert('RGBA')
alphaImage = Image.open('alphaimage.png').convert('L')
baseImage.putalpha(alphaImage)
baseImage.save('newimage.tiff', 'TIFF', compression='tiff_adobe_deflate')

这是给定的结果:

预期结果:

是否可以防止预乘?我还尝试拆分波段并将它们与新的 Alpha 通道合并,但结果相同。

【问题讨论】:

    标签: python python-imaging-library alpha premultiplied-alpha


    【解决方案1】:

    您可以尝试像这样手动反转预乘:

    from PIL import Image
    
    baseImage = Image.open('baseIm.tiff').convert('RGBA')
    alphaImage = Image.open('alphaIm.tiff').convert('L')
    
    px = baseImage.load()
    width, height = baseImage.size
    for i in range(width):
        for j in range(height):
            if px[i, j][3] != 0:
                R = int(round(255.0 * px[i, j][0] / px[i, j][3]))
                G = int(round(255.0 * px[i, j][1] / px[i, j][3]))
                B = int(round(255.0 * px[i, j][2] / px[i, j][3]))
                a = px[i, j][3]
    
                px[i, j] = (R, G, B, a)
    
    
    baseImage.putalpha(alphaImage)
    baseImage.save('newIm.tiff', 'TIFF', compression='tiff_adobe_deflate')
    

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2019-11-10
      • 2018-04-09
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      相关资源
      最近更新 更多