我正在尝试读取 2 个图像文件,然后将 image2 合并到 image1 之上,但下面的代码似乎不起作用。保存后,我只看到 image1 是原始的。 两张图片均为 PNG。
String url= uploadPath + filename;
BufferedImage im = ImageIO.read(url);
String url2= "image2.png";
BufferedImage im2 = ImageIO.read(url);
Graphics2D g = im.createGraphics();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
g.drawImage(im2, im.getWidth()/2, im.getHeight()/2, null);
g.dispose();
ImageIO.write(im, "png", new File( url ));
我在这里错过了什么? 谢谢
最佳答案
我在让它工作时没有遇到任何问题。
我确实找到了这条线...
g.drawImage(im2, im.getWidth()/2, im.getHeight()/2, null);
有点担心。如果图像尺寸恰到好处,则可能可以在背景图像之外渲染图像。您应该使用相对于主图像的坐标...
public class MergeImages {
public static void main(String[] args) {
File inner = new File("Inner.png");
File outter = new File("Outter.png");
try {
BufferedImage biInner = ImageIO.read(inner);
BufferedImage biOutter = ImageIO.read(outter);
System.out.println(biInner);
System.out.println(biOutter);
Graphics2D g = biOutter.createGraphics();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
int x = (biOutter.getWidth() - biInner.getWidth()) / 2;
int y = (biOutter.getHeight() - biInner.getHeight()) / 2;
System.out.println(x + "x" + y);
g.drawImage(biInner, x, y, null);
g.dispose();
ImageIO.write(biOutter, "PNG", new File("Outter.png"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
我还会仔细检查 shuangwhywhy 建议,确保您不会在同一个文件中读取两次......我在测试代码时做了一些事情:P
关于Java:合并 2 个图像不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658144/