我使用下面的代码合并两个图像。一张没有透明度的基本图像,一张有透明度的叠加图像。他们拥有的图像的文件大小分别为 20kb 和 5kb。一旦我合并了这两个图像,生成的文件大小大于 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();
}
}