ScaledInstanceを使って画像を縮小する

別の方法として,java.awt.image.getScaledInstance()を使う方法があるらしい.
こっちは別途特別に何かをインストールする必要もない.

サンプルは以下のとおり.(JAIの場合と同じサンプル)


/**
* ScaledInstanceを使って画像を縮小する
* @param sourceFile 元画像ファイルパス
* @param targetFile 変換先画像ファイルパス
* @throws IOException
*/

public void resizeByScaledInstance(String sourceFile, String targetFile) throws IOException{
// 元画像の読み込み
BufferedImage sourceImage = ImageIO.read(new File(sourceFile));

// 縮小率・縮小方法を指定して縮小
Image targetImage = sourceImage.getScaledInstance(sourceImage.getWidth() / 3, -1, Image.SCALE_SMOOTH);

// Image → BufferedImageの変換
BufferedImage targetBufferedImage = new BufferedImage(targetImage.getWidth(null), targetImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g = targetBufferedImage.createGraphics();
g.drawImage(targetImage, 0, 0, null);

// 変換画像の出力
ImageIO.write(targetBufferedImage, "png", new File(targetFile));
}

こっちのほうが手間がかからない割りに,画質はJAIの場合よりも綺麗になった.