以下のコードを使用して2つの画像をマージします。透明度のない1つのベース画像、透明度のある1つのオーバーレイ画像。そこにある画像のファイルサイズはそれぞれ20kbと5kbです。2つの画像をマージすると、結果のファイルサイズは> 100kbになり、25kbの合計サイズの少なくとも4倍になります。25kb未満のファイルサイズを期待していました。
public static void mergeTwoImages(BufferedImage base, BufferedImage overlay, String destPath, String imageName) {
// create the new image, canvas size is the max. of both image sizes
int w = Math.max(base.getWidth(), overlay.getWidth());
int h = Math.max(base.getHeight(), overlay.getHeight());
BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
// paint both images, preserving the alpha channels
Graphics2D g2 = combined.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.drawImage(base, 0, 0, null );
g2.drawImage(overlay, 0, 0, null);
g2.dispose();
// Save as new image
saveImage(combined, destPath + "/" + imageName + "_merged.png");
}
私のアプリケーションは非常に優れたパフォーマンスである必要があります。したがって、この効果が発生する理由と、結果のファイルサイズを減らす方法を誰かに説明できますか?
どうもありがとう!
編集:あなたの答えをどうもありがとう。saveImageコードは次のとおりです。
public static void saveImage(BufferedImage src, String file) {
try {
File outputfile = new File(file);
ImageIO.write(src, "png", outputfile);
} catch (IOException e) {
e.printStackTrace();
}
}