为什么将JPG格式的图像转换为PNG格式后会变大10倍?

3
我有一张通过网络摄像头拍摄的猫的图片(主题可能不重要)。我已经以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)。
关于神秘的额外数据有什么想法吗?

1
"..打开一个JPG是无损的.." 当然,但是保存它就不是了。当我们'打开'一个JPEG文件来查看时,整个图像会被解码到内存中,并使用宽度 * 高度 * 位深度 字节的内存 -- 这与PNG相同。"我并不是在问为什么这两种格式产生不同的文件大小.." 是的,你是在问。 - Jongware
2个回答

5
JPEG 的压缩效果比 PNG 好。然而,JPEG 为了更好的压缩效果牺牲了原始图像的保真度。PNG 能够完全还原原始图像。
如果你从 JPEG 转换到 PNG,你不会看到任何变化。 如果你从 PNG 转换到 JPEG,很可能会看到很多变化。
JPEG 使用一系列压缩技术,其中之一是 DCT,用于转换图像。这样会在颜色上产生微小的波动。例如,如果你开始有一个纯色的红色块,JPEG 会产生很多轻微的颜色变化。
PNG 压缩依赖于在扫描线中找到重复的像素模式。JPEG 引入的微妙的颜色变化可能会使 PNG 压缩效果不佳。
你提到的额外数据只是两种格式表示相同图像的差异。
如果我从相机中获取一个 JPEG 图像并将其转换为 PNG,结果通常会大约增加10倍。 对于 PNG 图形图像转换为 JPEG,我通常得到的文件大小会减少三分之一。

JPEG引入的微妙色彩变化可能会使PNG压缩效果不佳。如果可以的话,你能否对此进行更详细的解释?我对此感到困惑。你是不是在说解压缩JPEG动态地引入了与原始图像中不同的变化?这是额外的数据吗?所以解压缩JPEG就像运行一个小程序,根据文件内的数据动态“绘制”图像,而解压缩PNG只是解压缩像素点? - Paul Uszak
压缩图像最初会产生变化。如果有一张只有一种颜色的PNG图像,可以将其压缩得非常好。JPEG压缩会将该图像转换为具有不同颜色的像素。在这种情况下使用PNG格式并不能很好地进行压缩。 - user3344003

2

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接