本文介绍了使用ImageIO.write的质量损失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我已经注意到使用ImageIO.write显着的质量损失,如何禁用自动压缩?

I have noticied significant quality loss using ImageIO.write, how I can disable automatic compression ?

val baos: ByteArrayOutputStream = new ByteArrayOutputStream
val newBi = new BufferedImage(img.getWidth, img.getHeight, BufferedImage.TYPE_INT_RGB)
val gr = newBi.createGraphics()
gr.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), Color.WHITE, null)
ImageIO.write(newBi, "jpeg", baos)
val b = baos.toByteArray
baos.close()


推荐答案

使用。

ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // Needed see javadoc
param.setCompressionQuality(1.0F); // Highest quality
writer.write(image);

对于非照片图像,请使用.png。

For non-photo images use .png.

正如@PiotrekDe评论的那样,以下似乎更符合逻辑。

As @PiotrekDe commented, the following seems more logical.

writer.write(null, new IIOImage(image, null, null), param)

这篇关于使用ImageIO.write的质量损失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 14:43