Java:合并2个图像不起作用

时间:2013-02-02 02:56:54

标签: java image image-processing awt java-2d

我正在尝试读取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 ));

我在这里想念什么? 感谢

3 个答案:

答案 0 :(得分:3)

您的问题im2im完全相同:

BufferedImage im = ImageIO.read(url);
BufferedImage im2 = ImageIO.read(url);

我想这是一个错字:它应该是url2而不是url才能被视为im2,我是对的吗?

BufferedImage im2 = ImageIO.read(url2);

答案 1 :(得分:3)

我没有问题让它发挥作用。

enter image description here

我确实找到了这条线......

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

答案 2 :(得分:1)

您也可以尝试透明度为0.5的SRC_ATOP。