【发布时间】:2021-09-05 14:14:44
【问题描述】:
这是一个 GIF,仅包含一个 75 像素宽的图像。
图像有一个图像描述符,图像左侧位置为 25。
所以图像最左边的 25 个像素没有被覆盖。由于GIF specification 声明
背景颜色是用于屏幕上未被图像覆盖的像素的颜色。
背景颜色索引为 0,调色板中的第一个条目是 (0, 255, 0),我认为最左边的 25 个像素应该是绿色的。
相反,浏览器将这些像素呈现为透明的。
谁能告诉我这是为什么?我是否遗漏了规范中的某些内容?
【问题讨论】:
-
像素被编码为调色板中的索引,并且一个条目被指定为“透明”(不被图像覆盖),这就是浏览器以这种方式呈现它的原因。原则上,没有什么能阻止调色板中的一个条目与其他条目具有相同的颜色,只是它位于不同的索引处。所以我猜测绿色条引用了一个恰好具有相同颜色的不同条目。现在,我不完全确定为什么透明索引有与之关联的颜色,但我怀疑它与 Disposal Method 标志以及动画 gif 如何清除框架有关。
-
'"transparent"(未包含在图像中)' - 我阅读规范的方式,它是图像外部时使用的背景颜色。如果您可以向我解释为什么使用透明度而不是背景颜色,那将回答我的问题。
-
啊,我想我误解了,对不起。根据this answer 的说法:“背景颜色在很大程度上是GIF87a 的遗弃,目前仅在‘恢复背景’帧混合模式下需要”。它继续说:“我见过的所有解码器都将不属于任何帧的像素视为透明,即使所有帧中的透明度标志都归零” - 所以你在这里遇到的可能是非官方的但被普遍接受行为。
-
感谢您的帮助
标签: gif specifications