确定GIF在Python中是否透明

前端之家收集整理的这篇文章主要介绍了确定GIF在Python中是否透明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何检查GIF是否透明(甚至部分)?

我通过用PIL打开图像并检查图像的模式,完成了PNG.但是,GIF具有相同的模式.

对于假阳性,我不介意如果一个完全不透明的GIF被标记为透明(假设这是一个罕见的情况),但我确实知道透明GIF被标记为不透明.

对于图书馆,我更喜欢使用PIL而不是其他东西的解决方案,但无论如何.

解决方法

@H_403_11@
img = Image.open(filename)
if img.mode == "RGBA" or "transparency" in img.info:
    # image uses transparency

请参阅here,了解透明度如何与GIF(和8位,调色PNG)配合使用.

请注意,您的假阳性情况是可能的:GIF可以将颜色定义为透明但不使用它.我想像这样会是相当罕见的,为什么扔一个颜色的透明度,而不是使用它? (你的假阴性是不可能的.)

不过,如果您需要知道是否实际使用透明度,则可以将透明颜色的两个版本映射到不同的颜色(比如黑色和白色),然后进行比较.如果有任何差异,图像确实使用透明度.像这样:

def uses_transparency(filename):
    img = Image.open(filename)
    trans = img.info.get("transparency",None)
    if trans is not None:
        trans *= 3  # convert color number to palette table index
        palette = img.getpalette()
        imgs = []
        for bg in [0,255]:   # map transparent color first to black,then white
            palette[trans:trans+3] = [bg] * 3
            img.putpalette(palette)
            imgs.append(img.convert("L"))
        return bool(ImageChops.difference(*imgs).getbBox())

您可以使用类似的方法来查看24位PNG是否实际使用Alpha通道,将其粘贴到白色和黑色背景上并比较结果.

猜你在找的HTML相关文章