【问题标题】:Why does PNGing an image from a JPG make it 10x bigger?为什么从 JPG 中对图像进行 PNG 处理会使它变大 10 倍?
【发布时间】:2015-05-17 08:38:20
【问题描述】:

我有一张通过网络摄像头拍摄的猫的图像(主题可能并不重要)。我已将其作为 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 是无损的.." 当然,但 保存 它不是。当“打开”JPEG 以查看它时,整个图像被解码到内存中,并使用 width * height * bitdepth 字节的内存——这与 PNG 相同。 “我不是在问为什么这两种格式会产生不同的文件大小......”是的。

标签: png jpeg bmp


【解决方案1】:

JPEG 本身产生比 PNG 更好的压缩。然而,JPEG 牺牲了对原始图像的保真度以获得更好的压缩效果。 PNG 完全复制了原始文件。

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

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

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

您所指的额外数据只是两种格式表示同一图像的方式不同。

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

【讨论】:

  • " JPEG 引入的细微颜色变化会使 PNG 压缩效果降低" - 如果可以,请您扩展一下?我很难理解。您是说动态解压缩 JPEG 会在原始图像中引入额外的变化吗?这是额外的数据吗?因此,解压缩 JPEG 类似于运行一个小程序,该程序会根据文件中的数据动态“绘制”图像,而解压缩 PNG 只会解压缩像素?
  • 压缩图像最初会产生变化。有一个只有一种颜色的图像,PNG,可以很好地压缩它。 JPEG 压缩会将该图像转换为具有不同颜色的像素。在上面使用 PNG 不会压缩得那么好。
【解决方案2】:

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

“额外数据”实际上是由于使用了不同的算法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多