我正在使用javax.imageio API和JAI来压缩不同类型的图像。对于使用JPEGImageWriter
进行JPEG压缩和GIFImageWriter
进行GIF压缩的情况,它都正常工作。但是使用PNGImageWriter
进行PNG压缩时会抛出异常,如未设置压缩类型或“没有有效压缩”等。因此,我使用了下面这个ImageWriter
来进行PNG压缩。它可以工作,但是图像质量太差。
有人能建议如何使用PNGImageWriter
进行PNG压缩以及包含它的JAR文件吗?
File input = new File("test.png");
InputStream is = new FileInputStream(input);
BufferedImage image = ImageIO.read(is);
File compressedImageFile = new File(input.getName());
OutputStream os =new FileOutputStream(compressedImageFile);
Iterator<ImageWriter>writers =
ImageIO.getImageWritersByFormatName("jpg"); // here "png" does not work
ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.5f);
writer.write(null, new IIOImage(image, null, null), param);