为什么从 JPG 中对图像进行 PNG 处理会使它放大 10 倍?

Why does PNGing an image from a JPG make it 10x bigger?

我有一张通过网络摄像头拍摄的我的猫的照片(主题可能不重要)。我已将其作为 31 kB JPG 文件获取。当我用图像编辑器打开它,然后将其保存(不做任何改动)为 PNG(最大压缩)时,它存储为 297 kB 文件。

为什么 PNG 文件比原始 JPG 文件大 10 倍。据我了解,打开 JPG 是无损的,保存 PNG 是无损的。那么,所有额外数据从何而来?如果图像完全来自小文件,为什么它会重新保存到光盘大小的 10 倍?

请仔细阅读。我不是在问为什么这两种格式从原始图像产生不同的文件大小。我在问为什么打开现有的 JPG 然后保存与 PNG 完全相同的图像要大 10 倍。据我所知,我不认为这是一个重复的问题。

我做过的一些测试:-

  1. 我查看了 JPG 和 PNG,它们看起来一模一样。
  2. 我压缩了两个文件,cat.jpg.zip 为 31 kB,cat.png.zip 为 296 kB。我认为这意味着两个文件都被完全压缩,几乎没有潜在的冗余。
  3. 我也通过 BMP 格式尝试过; cat.jpg (31 kB) -> cat.bmp (922 kB) -> cat.bmp.zip (404 kB).

关于神秘的额外数据有什么想法吗?

JPG 使用有损压缩,而 PNG 使用无损压缩。当您将 JPG 转换为 PNG 时,实际发生的是从 JPG 解压缩并将结果保存为 PNG。

"extra data"实际上是由于使用了不同的算法。

至于为什么压缩后的文件也有不同的大小,那是因为PNG必须保存所有像素(包括那些JPG有损压缩的像素)loselessy。

JPEG 本质上产生比 PNG 更好的压缩。但是,JPEG 牺牲了对原始图像的保真度以获得更好的压缩。 PNG 完全重现原作。

如果您从 JPEG 转换为 PNG,您不会看到任何变化。 如果您从 PNG 转到 JPEG,您可能会看到很多变化。

JPEG 使用了一系列压缩技术。其中之一,DCT,变换图像。这会在颜色上产生微妙的波纹。例如,如果您从全是一种颜色的纯红色块开始,JPEG 会产生很多细微的颜色变化。

PNG 压缩依赖于在扫描线中寻找重复的像素模式。 JPEG 引入的细微颜色变化会使 PNG 压缩效率降低。

您提到的额外数据只是两种格式表示同一图像的不同之处。

如果我从相机拍摄 JPEG 图像并将其转换为 PNG,结果通常会大 10 倍左右。 对于转为 JPEG 的 PNG 图形图像,我通常会得到大约小 1/3 的文件。