【问题标题】:Java: Merging 2 images is not workingJava:合并 2 个图像不起作用
【发布时间】:2013-01-17 11:09:02
【问题描述】:

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

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

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 没有抛出异常?

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


【解决方案1】:

你的问题是im2im一模一样:

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

我猜这是一个错字:应该是url2 而不是url 被读作im2,对吗?

BufferedImage im2 = ImageIO.read(url2);

【讨论】:

  • 嗨,是的错字,但仍然无法正常工作。它仍然将 image1 保存为原始图像。
  • @jeet 我同意 MadProgrammer 的建议,即您可以将 im2 画出 im 的界限。顺便说一句,你的两张图片有多大?
  • 如果您合并两个相同的图像,您还能期待哪些其他输出?
【解决方案2】:

我没有问题让它工作。

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2013-07-22
      • 2018-12-04
      • 2015-02-09
      • 2012-12-25
      相关资源
      最近更新 更多