gpt4 book ai didi

python - 确定 GIF 在 Python 中是否透明

转载 作者:太空狗 更新时间:2023-10-29 17:16:17 25 4
gpt4 key购买 nike

我该如何检查 GIF 是否透明(甚至是部分透明)?

我通过使用 PIL 打开图像并检查图像的模式来使用 PNG 完成此操作。但无论如何,GIF 都具有相同的模式。

至于误报,我不介意完全不透明的 GIF 是否被标记为透明(假设这种情况很少见),但我不介意透明 GIF 是否被标记为不透明。

至于库,我更喜欢使用 PIL 的解决方案,而不是其他任何东西,但不管怎样。

最佳答案

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())
return False

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

关于python - 确定 GIF 在 Python 中是否透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com