为什么 GIF 图像大小大于单个帧大小的总和?

Why is GIF image size more than the sum of individual frame size?

我刚刚尝试使用一些在线服务将一些 JPEG 转换为 GIF 图像。对于一组 1.8 MB 的随机选择的 JPEG,生成的 GIF 大小约为 3.8 MB(未启用任何额外压缩)。

我了解 GIF 是无损压缩。这就是为什么我预计结果输出约为 1.8 MB(输入大小)。有人可以帮我了解这个额外的 space 发生了什么吗?

另外,有没有更好的方法将一组相似的图片捆绑在一起(传输)?

JPEG 是有损压缩文件,但它仍然是压缩文件。当它解压缩为原始像素数据然后重新压缩为 GIF 时,获得更大的尺寸是合乎逻辑的

GIF 作为照片的压缩方式较差,它主要适用于平面彩色图。它使用 RLE [运行-length encoding] 如果我没记错的话,那就是你在压缩文件中得到的条目意味着 "repeat this value N times",所以你需要在水平序列中有很多相同颜色的像素才能得到良好的压缩。

如果你有彼此相似的图像,也许你应该考虑将它们打包为视频流的连续帧(越相似应该越接近)并使用一些无损压缩器(或者甚至冒险使用有损压缩器)一个)用于视频,但也许这有点矫枉过正。

如果您有彩色图像,请乘以宽度 x 高度 x 3。这是未压缩图像数据的正常大小。

GIF 和 JPEG 是压缩该数据的两种不同方法。 GIF 使用 LZW 压缩方法。在该方法中,编码器创建了先前遇到的数据序列的字典。编码器写入表示序列而不是实际数据的代码。如果编码找不到这样的序列,这实际上会导致文件大于实际图像数据。

这些 GIF 序列更有可能出现在使用相同颜色的绘图中,而不是出现在整个颜色略有不同的摄影图像中。

JPEG 使用一系列压缩步骤。这些的缺点是您可能无法准确地了解您输入的内容。第一个是从 RGB 到 YCbCr 的转换。这些颜色空间之间没有一对一的映射,因此可以在那里进行修改。

接下来 subsampling.The 使用 YCbCr 的原因是您可以以比 Y 分量更低的速率对 Cb 和 Cr 分量进行采样,并且仍然可以很好地表示原始图像。如果您执行 1 Y 到 4 Cb 和 4 Cr,您可以将要压缩的数据量减少一半。

接下来是离散余弦变换。这是对整数执行的实数计算。这会产生舍入误差。

接下来是量化。在此步骤中,丢弃 DCT 中不太重要的值(要压缩的数据较少)。它还引入了整数除法的错误。