压缩 Java 中写入图像大小的 2D 图形



我有一个图像,在java中使用java.awt.Graphics2D我在图像上写了一个文本。一切都很好,直到这里。当我尝试在java中使用ImageWriteParam压缩此图像时,图片被夸大了。下面是我用来压缩图像大小的代码。不过,此代码适用于普通图像。

File input = new File("Input Image File");
BufferedImage image = ImageIO.read(input);
File compressedImageFile = new File("Compressed image file location");
OutputStream os = new FileOutputStream(compressedImageFile);
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(1.0f);  // Change the quality value you prefer
try {
writer.write(null, new IIOImage(image, null, null), param);
System.out.println(writer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
os.close();
ios.close();
writer.dispose();

任何帮助,不胜感激。谢谢!

则使用默认ImageWriterParams,使用writer.getDefaultWriteParam()。但正如ImageWriter的 API 中提到的,它在这里说:

[...]默认实现构造并返回一个新的 ImageWriteParam 对象,该对象不允许平铺、渐进式编码或压缩...

还有一个关于如何处理这个问题的提示,

单个插件可以返回启用了其他可选功能的ImageWriteParam 实例,也可以返回 ImageWriteParam 的插件特定子类的实例。

最新更新