java - 为什么我从 gif 文件转换的 jpg 文件不清晰?

标签 java compression jpeg gif javax.imageio

我使用以下代码将 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(); }

那么,换个角度问这个问题,通过上述方法,如何提高输出质量?

最佳答案

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

有可能 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 等无损压缩格式在插图和线条方面效果更好艺术,其中有大面积的相似颜色,几乎没有渐变效果。

关于java - 为什么我从 gif 文件转换的 jpg 文件不清晰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/967567/

相关文章:

java - java中使用Graphics绘制线条

java - 写 "compressed"数组提高IO性能?

wix - 我能比 CompressionLevel ="high"做得更好吗?

iOS UIImage 存储格式、内存使用和编码/解码

java - 运行 Quartz Scheduler 程序时出现异常

java - 如何在 java 中使用其他基数?

java - 如何删除大字符串数据中的重复字符串?

javascript - 在js中压缩0's and 1'的字符串

c# - 以渐进格式保存 JPEG

c - 图像恢复程序有问题