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

标签 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 ));

我在这里错过了什么? 谢谢

最佳答案

我在让它工作时没有遇到任何问题。

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

关于Java:合并 2 个图像不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658144/

相关文章:

arrays - 如何在 ZStack SwiftUI 中将文本放置在图像的精确位置上

java - 词频循环

java - 如果满足某些条件,如何申请收集器?

javascript - 如何获得使用css操作的图像高度

ios - 扩张重点

iOS如何屏蔽图片背景色

python - RuntimeError : Given groups=1, 大小 [64, 3, 3, 3] 的权重,预期输入 [4, 5000, 5000, 3] 有 3 个 channel ,但有 5000 个 channel

java - 谁能解释为什么 Java GetNetworkInterfaces 在 Windows 7 上返回这么多接口(interface)

java - JTextField 在最小化时调整大小

c++ - 如何在 YUV 到 RGB 转换期间垂直翻转缓冲区