我知道动画GIF帧中的透明像素由透明颜色索引确定,当透明颜色标志设置为1时,我们可以通过将像素分配给透明颜色索引的值来将像素设置为透明。
但是,我不知道如何确定动画GIF帧的透明颜色索引是什么,是否设置了透明颜色标志,以及如何确定帧中的哪些像素是这种颜色。我环顾了诸如ImageMagick,wand和Pillow之类的工具,但无法制定解决方案以找到透明像素的数量。
我想到了一些伪代码(Python风格)来制定我的解决方案:
def count_transparent(frame):
count = 0
if transparent_flag(frame):
transparent_pixel = find_transparent_pixel(frame)
for row in frame:
for col in frame:
# Compare the colors
if frame[row][col] == transparent_pixel:
count += 1
return count
我可以使用哪些工具/方法(以及如何使用它们)来获取信息,以查找与每个动画GIF帧的透明色标志和透明像素有关的信息,还可以在其中迭代帧的每个位置?
我找到的最接近的是gifsicle,它看起来使我能够找到有关透明色标志和透明像素的信息,但是我无法使用它遍历框架的每个位置。我很高兴可以在Python中使用某些东西,尽管也欢迎使用任何语言的解决方案。
在ImageMagick中,你可以通过提取alpha通道来确定透明像素的数量,对其进行否定以使透明为白色,然后将该图像的平均值(在0到1范围内)乘以width * height。对于第10帧(从0开始)
convert image.gif[9] -alpha extract -negate -format "%[fx:mean*w*h]" info:
应该给你透明像素的数量。
太棒了,这正是我所需要的。作为后续问题,是否可以确定GIF框架的调色板中的哪个索引(局部的或全局的)成为定义透明度像素的索引?
抱歉,我不知道那个答案。标识-详细报告透明的颜色。但是我不确定这是否是您想要的吗?
这就是我想要的,尽管我可能需要找到一种方法来仅报告透明颜色。谢谢您的帮助!