image - 使用ImageIO.write的质量下降

标签 image scala jpeg bufferedimage

我已经发现使用ImageIO.write导致质量显着下降,如何禁用自动压缩?

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

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。

正如@PiotrekDe所评论的那样,以下内容似乎更合乎逻辑。
writer.write(null, new IIOImage(image, null, null), param)

关于image - 使用ImageIO.write的质量下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17015197/

相关文章:

java - Akka是否适合瞬时网络覆盖的系统?

Scala: "override protected val"在定义案例类构造函数时导致错误

postgresql - 将 PostgreSQL 数据库加载到 SchemaRDD

c++ - 如何将文件夹图标设置为 jpeg 图像?

java - 将 TIF/TIFF 转换为 JPG : Bad endianness tag

java - 在 JPG 图像中隐藏消息

css - 缩小(缩放)图像以适合 parent 而不显示背景

java - 我无法显示当我在 netbeans 中执行 "cleaning and building"项目时不存在的那些图像

javascript - 使用 JavaScript 为我的网站提供多个图像模式

java - 如何在 java webapp 中的服务器上保存和检索图像