2013-02-21 95 views
3

我有一个关于JPEG文件写入的问题。假设我有一个PNG文件example.png,并且我想将文件格式更改为JPEG,而不会丢失任何信息。对于现在正在,我有两个解决方案:无损JPEG文件写入

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

    I = imread( 'example.png');

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

    II = imread('example.jpg');

    different = I-II;

    max(differ(:))

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

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

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

+0

解决您的问题非常容易:保持PNG图像。 – mmgp 2013-02-21 16:10:29

+0

Jpeg2000是一种无损jpeg文件格式,但不幸的是几乎没有软件支持jpeg2000。 .png和.gif是无损文件的最佳选择。 – 2013-02-21 16:18:22

+0

你的第一个假设需要改变。 “正常”的JPEG图像使用有损压缩格式。正如@ mmgp所说,与PNG保持合作是一个不错的选择。如果你正在寻找更好的压缩比,那么你将需要放弃无损的想法。 – BitBank 2013-02-22 16:04:10

回答

1

此问题没有解决方案(但截至2018年)。

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

JPEG的常见支持版本基于DCT压缩,根据定义,它执行转换和舍入,从而导致一些精度损失。

很少支持替代的无损JPEG压缩方法JPEG-LS。

还有JPEG-XT扩展,它是有损图像+图层的组合,用于重建无损原始图像。它在JPEG图像查看器中失败,但它更新,我不知道它是否在任何地方实现。

如果您确实需要无损,请使用PNG。使用JPEG,您可以获得的最好效果是在质量= 100(这不是字面上的100%)时,RGB色彩空间中的JPEG损失最小。