4

我需要将 a 写BufferedImage为 .png 而不执行压缩。我环顾四周,并提出以下代码。

public void save(String outFilePath) throws IOException {
    Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("png");
    ImageWriter writer = iter.next();

    File file = new File(outFilePath);      
    ImageOutputStream ios = ImageIO.createImageOutputStream(file);
    writer.setOutput(ios);

    ImageWriteParam iwp = writer.getDefaultWriteParam();
    iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    iwp.setCompressionQuality(1.0f);

    IIOImage image = new IIOImage(mapImage, null, null);

    writer.write(null, image, iwp);
    writer.dispose();

    //ImageIO.write(mapImage, "png", file);
}

这是抛出的异常。

Exception in thread "main" java.lang.UnsupportedOperationException: Compression not supported.
    at javax.imageio.ImageWriteParam.setCompressionMode(Unknown Source)
    at Map.MapTransformer.save(MapTransformer.java:246)
    at Map.MapTransformer.main(MapTransformer.java:263)
4

1 回答 1

2

PNG 图像通过首先应用预测过滤器(您可以在五个变体中进行选择)来实现压缩,然后使用 ZLIB 压缩预测误差。你不能省略这两个步骤,你可以做的是指定“NONE”作为预测过滤器,并将compressionLevel=0 用于ZLIB 压缩,这将大致对应于未压缩的图像。该javax.imageio.*软件包不允许(我认为)选择此参数,也许您可​​以尝试使用

于 2013-03-10T13:13:34.720 回答