ImageIOでJpegの品質を上げる

ImageIOで画像をjpeg形式で保存すると、通常は結構劣化してしまう。(2000年代のwebレベル?)

// 通常の保存処理
ImageIO.write(image, "jpeg", new File("image.jpg"));

以下の方法を使用すれば最高品質で保存が可能になる。

// 最高品質で保存処理
try (FileImageOutputStream output = new FileImageOutputStream(new File("image.jpg"))) {
    ImageWriter imageWriter = ImageIO.getImageWritersByFormatName("jpeg").next();
    ImageWriteParam imageWriteParam = writeImage.getDefaultWriteParam();
    imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    imageWriteParam.setCompressionQuality(1.0f);
    imageWriter.setOutput(output);
    imageWriter.write(null, new IIOImage(image, null, null), imageWriteParam);
    imageWriter.dispose();
}