【问题标题】:Why the jpg file I converted from a gif file isn't crisp and clear?为什么我从 gif 文件转换的 jpg 文件不清晰?
【发布时间】:2010-11-01 08:10:00
【问题描述】:

我使用以下代码将 gif 文件转换为 jpg 文件,它可以工作,但结果 jpg 文件与原始 gif 文件的质量不同,为什么?有什么方法可以提高质量?

try
{
  ImageIO.write(ImageIO.read(new File("C:/abc.gif")),"jpg",new File("C:/abc.jpg"));
}
catch (Exception e) { e.printStackTrace(); }

那么,换个角度问这个问题,用上面的方法,如何提高输出质量呢?

【问题讨论】:

标签: java compression jpeg gif javax.imageio


【解决方案1】:

JPEG 是一种lossy image compression 格式,它会丢弃人眼无法很好注意到的信息。但是,根据压缩图像时的图像质量设置,compression artifacts,例如块状和污点可能会变得可见 - 这就是图像看起来不清晰的原因。

ImageIO.write 方法可能会使用低于保持图像看起来足够好的所需的质量设置来保存 JPEG。

为了设置更高的质量设置,需要使用ImageWriteParam 指定图像质量设置,然后使用ImageWriter 输出JPEG。

例如:

// Get a writer for JPEG.
ImageWriter iw = ImageIO.getImageWritersByFormatName("jpeg").next();
iw.setOutput(new FileImageOutputStream(outputFile));

// Set the compression quality to 0.9f.
ImageWriteParam iwParam = iw.getDefaultWriteParam();
iwParam.setCompressionQuality(0.9f);

// Write image
iw.write(null, new IIOImage(imageToWrite, null, null), iwParam);

感兴趣的方法:

也就是说,正如其他答案所提到的,JPEG 不适合压缩文本和插图。如果目标是保持图像质量,但文件大小可能比使用 JPEG 压缩时更大,那么使用lossless image compression 格式(例如PNG)将保持图像质量不变,而不会造成任何损失。但是,在许多情况下,PNG 文件的文件大小将大于 JPEG。 (但情况并非总是如此。)

一般的经验法则是,对于照片和其他逼真的图像,JPEG 等有损压缩格式适用于文件大小与质量的权衡,而 PNG 等无损压缩格式适用于插图和线条艺术,有大面积的相似颜色,几乎没有渐变效果。

【讨论】:

  • 太好了,它“几乎”像我预期的那样工作!但是我注意到了一些有趣的事情,我读了一张 png 图像并将 CompressionQuality 设置为 1.0f,我认为输出看起来像原始图像,但是,浅蓝色变成了深蓝色,因为它是一个股票图表,我不介意,我很高兴它有效!谢谢 !你可以试试下面的图表:ichart.finance.yahoo.com/…
  • @Frank:即使压缩质量为 1.0f,压缩也会有损,因此输出质量与原始质量不同。我过去观察到颜色的变化,所以这可能是有损压缩的影响之一。
【解决方案2】:

JPEG 对于内部带有文本的图像特别不利。一个不错的选择是 .PNG。

【讨论】:

    【解决方案3】:

    JPEG 保证保真度有所损失;这就是它实现压​​缩的方式。您可以选择不同的块大小来最小化伪影,但会有伪影。

    GIF 是无损的,JPEG 是有损的; abc.jpg 永远不会是与 abc.gif 等价的像素。

    【讨论】:

    • JPEG 标准中有无损部分,但没有人费心去实现 ist :)
    • 虽然 GIF 是无损的,但值得注意的是,它是一种无损的索引颜色格式,因此从 Truecolor 源保存时会丢失一些颜色信息。 JPEG 是一种有损真彩色格式,因此索引图像被上转换为真彩色(质量没有提高),然后在 JPEG/DCT 意义上“平均化”(质量相应下降)。
    • GIF 标准还有一个有损部分。唉,事情没那么简单:)
    【解决方案4】:

    粗略地说,JPEG 适用于照片性质的图像。如果图像包含大量颜色变化、具有自然主义元素并且类似于现场环境,那么 JPEG 将提供良好的质量而没有可见的伪影。

    如果图像是绘制的,或者包含大片单一颜色且不是照片,则使用 PNG 压缩图像会更好。这是一种无损格式,可以处理 32 位颜色。

    这些天你几乎不应该使用 GIF 格式的图像 - 该格式仅支持 8 位颜色并且提供相对较差的压缩。

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 1970-01-01
      • 2011-03-12
      • 2017-04-04
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      相关资源
      最近更新 更多