【发布时间】:2021-03-17 08:55:25
【问题描述】:
我知道动画 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 一起使用的东西,尽管也欢迎任何语言的解决方案。
【问题讨论】:
-
PIL
Images 有一个info字典,其中包含取决于格式的各种信息。在查看了用于处理 GIF 文件的 source code 之后,看起来这本字典中的一个键是info["transparency"]— 所以看起来您需要的信息可能可用。 -
请问你到底想做什么?您是否有一个示例 GIF,其中您知道您要寻找的透明像素的数量?如果有,请分享一下?您是在处理 GIF 动画还是普通的单帧图像?
-
您知道动画 GIF 的帧不一定覆盖整个图像区域吗?一个框架有时只适用于和更新比整个画布更小的区域,所以您是否认为更新区域之外的像素是透明的,因为它们看不到?
-
@martineau 酷,我会看看
info字典,看看我能从中得到什么。 -
@MarkSetchell 任何 GIF 都可以工作(我没有知道透明像素数量的示例)。我特别选择了 GIF,因为我正在尝试研究您指出的技术的应用频率,我们对帧的较小区域执行更新以优化空间。
标签: python image-processing imagemagick gif animated-gif