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

标签 png jpeg bmp

我有一张通过网络摄像头拍摄的我的猫的照片(主题可能不重要)。我已将其作为 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)。

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

最佳答案

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

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

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

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

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

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

关于png - 为什么从 JPG 中对图像进行 PNG 处理会使它放大 10 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29056371/

相关文章:

c - 编写未压缩的 JPEG 或 PNG 图像的简单方法?

c++ - 读取 BMP 文件 - 从 C/C++ 中获取数据

bmp - 试图了解如何绘制 1 位 BMP 图像

c - Deflate:在没有 zlib(或任何其他库)的情况下解压缩 PNG

delphi - Delphi 2009 图像列表和图像中的 PNG

html - 由于四舍五入不同,PNG 图像在 Chrome 中模糊;怎么办?

python - Python 3.4.1 的 PPM 到 JPEG/JPG 转换

Laravel 4.2 抛出 NotReadableException "Unsupported image type. GD driver is only able to decode JPG, PNG, GIF or WebP files."

jpeg - 校验和 JPEG 数据(不是整个文件)

delphi - delphi TBitmap是否支持alpha channel