Fra*_*ank 3 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(); }
Run Code Online (Sandbox Code Playgroud)
那么,从另一个角度来问这个问题,用上面的方法,如何提高输出质量?
coo*_*ird 20
JPEG是一种有损图像压缩格式,它丢弃了人眼无法察觉的信息.但是,根据压缩图像时的图像质量设置,压缩瑕疵(如块状和污迹)会变得可见 - 这就是图像看起来不清晰的原因.
该方法可能会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);
Run Code Online (Sandbox Code Playgroud)
感兴趣的方法:
也就是说,正如其他答案所提到的,JPEG不适合压缩文本和插图.如果目标是保持图像质量,但文件大小可能大于使用JPEG压缩,则使用PNG等无损图像压缩格式可以保持图像质量,而不会有任何损失.但是,在许多情况下,PNG文件的文件大小将大于JPEG.(但情况并非总是这样.)
一般的经验法则是,对于照片和其他逼真的图像,有损压缩格式(如JPEG)可以很好地适应文件大小与质量权衡,而无损压缩格式(如PNG)可以更好地用于插图和艺术线条,其中有大面积相似的颜色,渐变效果很小.
JPEG保证了保真度的一些损失; 这就是它如何实现压缩.您可以选择不同的块大小来最小化工件,但会有工件.
GIF是无损的,JPEG是有损的; abc.jpg永远不会像素相当于abc.gif.