我对JPEG文件写入有疑问。假设我有一个PNG文件example.png,我想将文件格式更改为JPEG而不会丢失任何信息。就目前而言,我有两个解决方案:
解决方案1:使用MATLAB执行文件格式转换
I = imread('example.png');
imwrite(I 'example.jpg', '模式', '无损');
II = imread('example.jpg');
不同= I-II;
MAX(不同(:))
此解决方案可以生成无损JPEG文件。但是,这个解决方案的问题在于 原始图像中的某些信息(如DPI分辨率)可能会丢失。而且, 生成的输出图像无法被流行的图像查看器(如IrfanView和Windows)查看 油漆
解决方案2:使用IrfanView软件。 使用IrfanView程序的“另存为”功能,我们可以非常轻松地更改文件格式。但是,虽然我在保存JPEG文件时设置了“最佳质量100”选项,但输出图像也显示一些信息丢失。对于所有像素,这两个图像之间的差异不为零。
因此,我想知道我应该怎样做才能解决这个问题。任何想法将不胜感激。
答案 0 :(得分:1)
这个问题没有解决方案(但是,截至2018年)。
如果您希望JPEG文件可用于大多数图像查看器,则无法使用有损压缩。
普遍支持的JPEG版本基于DCT压缩,根据定义,它会执行转换和舍入,从而导致精度损失。
很少支持替代的无损JPEG压缩方法JPEG-LS。
还有JPEG-XT扩展,它是有损图像+图层的组合,用于重建无损原稿。它在JPEG图像查看器中没有优雅地失败,但它甚至更新,我不知道它是否已在任何地方实现。
如果你真的需要无损,请使用PNG。使用JPEG,你可以得到的最好的是在RGB色彩空间中质量= 100的最低损耗JPEG(这不是100%)。