文件格式

GIF - 图形交换格式

GIF 是一种较早的无损图像格式,每帧最多只能包含 256 种颜色,但仍然是以图像形式在任意位置播放短小无声动画的最简单存储方式。

.gif

GIF,全称 Graphics Interchange Format(图形交换格式),由在线服务 CompuServe 于 20 世纪 80 年代末创建,用来让图片能够通过缓慢的拨号连接传输,并在几乎所有其他方面都不兼容的机器上显示。其第二版也是最终版增加了透明度和多帧支持,这个版本一直沿用至今。几十年后,GIF 仍然存在只有一个原因:它是在只接受普通图像的地方嵌入一段简短、无声、循环动画的最简单方式。

GIF 如何存储其图像

GIF 是无损的,但限制非常大。它使用的压缩算法叫作 LZW,会用短代码替换重复的像素序列,并精确保留原始数据。真正的限制在于颜色:每一帧最多只能使用256 种颜色,这些颜色从存储在文件中的调色板中选择。一张照片的色阶远远多于这个数量,因此将照片保存为 GIF 时,编码器被迫只选出 256 种并近似其他颜色,这通常通过抖动实现:用两种颜色的点阵来模仿第三种颜色。这也是为什么照片类 GIF 看起来会有斑点和色带。

透明度是非此即彼的。调色板中的一个条目可以被标记为透明,因此像素要么完全透明,要么完全不透明。无法做出柔和的半透明边缘,这就是为什么 GIF 标志在意外的背景上经常会出现生硬的边缘条纹。

动画其实就是按顺序存储的多张图片,每一帧都有自己的调色板、以百分之一秒为单位的延迟时间,以及一条“处置”指令,说明在显示这帧之前应如何处理前一帧。一个小的附加块会告诉播放器循环多少次。不支持声音。

GIF 携带哪些元数据

这一部分很短,答案也确实少见:GIF 几乎不携带任何元数据。元数据是文件对自身的描述信息,而 GIF 几乎没有空间存放它们。没有相机参数字段、没有作者、日期、标题,也没有地方存储 GPS 坐标。用于在照片中携带这些信息的 EXIF 和 IPTC 标准,从未针对 GIF 定义过。

报告能够展示的更多是结构,而不是历史:

  • 图像尺寸、色表大小以及实际使用的颜色数量。
  • 帧数、每一帧的延迟和处置方式,以及循环次数。
  • 哪一个调色板条目(如果有)被设为透明。
  • 图像是否为隔行扫描,这是一种旧技巧,可以在文件尚未完全加载完之前先显示一幅粗略的图像。
  • 注释块。GIF 允许自由文本注释,软件有时会把自己的名称、版权信息或来源地址写进去。这是最有可能出现名称的唯一位置。
  • 应用程序块。除了用于循环的那个块之外,Adobe 还定义了一种可以在 GIF 中携带完整 XMP 元数据包的块。它很少见,但也是报告中可以在 GIF 里显示 XMP 的原因。

这既有好处也有局限。GIF 不太可能泄露你的位置信息或相机序列号,因为它根本没地方存放这些数据。但这并不代表匿名:由照片或视频制作的动画仍然会展示像素中包含的一切,而任何注释块都会保留在文件中,直到有人将其删除为止。

何时使用 GIF

在聊天窗口、论坛帖子或电子邮件中,需要将一小段循环动画当作普通图片使用时,可以选用 GIF。对于静态图片,几乎没有继续选择它的理由:对于相同的扁平图形,PNG 体积更小且保留全色彩,而对于照片,JPG 的体积要小得多。

对于动画,合理的对比对象是视频。同样几秒钟内容的 MP4 或 WebM 片段通常只有 GIF 体积的一小部分,而且色彩平滑。WebP 和 APNG 也都支持全色彩和真正的透明效果。GIF 的优势既不在质量,也不在体积,而在于几乎所有地方都已经支持它。