无损JPEG文件写入

4

我有一个关于JPEG文件写入的问题。假设我有一个PNG文件example.png,我想将文件格式更改为JPEG而不丢失任何信息。目前,我有两个解决方案:

  • 解决方案1:使用MATLAB执行文件格式转换

    I = imread('example.png');

    imwrite(I,'example.jpg','Mode','lossless');

    II = imread('example.jpg');

    differ = I-II;

    max(differ(:))

    这个解决方案可以产生无损的JPEG文件。然而,这个解决方案的问题在于原始图像中的一些信息,例如DPI分辨率可能会丢失。此外,生成的输出图像不能被流行的图像查看器(如IrfanView和Windows Paint)查看。

  • 解决方案2:使用IrfanView软件。 使用IrfanView程序的“另存为”功能,我们可以非常容易地更改文件格式。然而,尽管我在保存JPEG文件时设置了“最佳质量100”的选项,输出图像仍然显示一些信息丢失。这两个图像之间的差异并非所有像素都为零。

因此,我想知道应该怎么做才能解决这个问题。任何想法都将不胜感激。


解决您的问题非常容易:使用PNG图像即可。 - mmgp
Jpeg2000是一种无损的JPEG文件格式,但不幸的是几乎没有软件支持Jpeg2000。.png和.gif是无损文件的最佳选择。 - Fred F
你的第一个假设需要改变。“正常”的JPEG图像使用有损压缩格式。就像@mmgp所说,坚持使用PNG是一个不错的选择。如果你正在寻找更好的压缩比率,那么你需要放弃无损的想法。 - BitBank
1个回答

2

这个问题目前还没有解决方案(截至2018年)。

如果您希望JPEG文件在大多数图像查看器中可用,就无法避免使用有损压缩。

JPEG的常见版本基于DCT压缩,根据定义执行变换和舍入,会导致一定的精度损失。

另一种无损压缩方法JPEG-LS很少被支持。

还有一种名为JPEG-XT扩展的方式,它是有损图像+层的组合,用于重建无损原始图像。它在JPEG图像查看器中具有良好的容错性,但它更加新颖,我不知道它是否已经实现。

如果您真的需要无损压缩,请使用PNG。使用JPEG时,您最好能以RGB颜色空间中质量为100(并不是真正的100%)的最小有损JPEG格式得到最佳效果。


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