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

时间:2015-10-21 02:16:57

标签: jpeg gif animated-gif

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

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

此外,是否有更好的方法来捆绑一组彼此相似的图像(用于传输)?

2 个答案:

答案 0 :(得分:1)

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

作为照片的压缩方法,GIF更糟糕,它主要适用于平面彩色图画。如果我记得很清楚它使用RLE [游程编码],那就是你在压缩文件中得到的条目是“重复这个值N次”,所以你需要在水平序列中有很多相同颜色的像素才能获得良好的压缩效果

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

答案 1 :(得分:0)

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

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

这些GIF序列更可能出现在使用相同颜色的绘图中,而不是在摄影图像中,其中颜色会随着颜色微妙变化。

JPEG使用一系列压缩步骤。它们的缺点是您可能无法准确了解所放入的内容。首先是从RGB转换为YCbCr。这些颜色空间之间没有一对一的映射,因此可以进行修改。

接下来是子采样。转到YCbCr的原因是你可以以低于Y分量的速率对Cb和Cr分量进行采样,并且仍能很好地表示原始图像。如果你做1 Y到4 Cb和4 Cr,你可以减少压缩一半的数据量。

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

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