4

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画像は、最初に予測フィルター(5つのバリエーションから選択可能)を適用し、次にZLIBを使用して予測エラーを圧縮することで圧縮を実現します。これらの2つの手順は省略できません。実行できるのは、予測フィルターとして「NONE」を指定し、ZLIB圧縮にはcompressionLevel = 0を指定することです。これは、非圧縮画像にほぼ対応します。パッケージはjavax.imageio.*(私が思うに)このパラメータを選択することを許可していません、おそらくこれまたはこれで試すことができます

于 2013-03-10T13:13:34.720 に答える