我使用以下代码将 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(); }
那么,换个角度问这个问题,通过上述方法,如何提高输出质量?
最佳答案
JPEG是 lossy 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/