4

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

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

    我 = imread('example.png');

    imwrite(I,'example.jpg','Mode','无损');

    II = imread('example.jpg');

    不同 = I-II;

    最大(不同(:))

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

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

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

4

1 回答 1

2

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

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

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

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

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

如果您真的需要无损,请使用PNG。使用 JPEG,您可以获得的最佳效果是 RGB 颜色空间中质量 = 100(实际上不是 100%)的最小损耗 JPEG。

于 2018-01-21T22:56:28.593 回答