叠加 PNG 时的奇怪行为

问题描述

我想将 this image 放在 this image 之上。

这是我的代码:

public class ImageOverlayTest {
    public static final String IMAGE_SOURCE_PATH = "src/main/resources/META-INF/resources/images/chess-sources/";
    public static final String IMAGE_DEST_PATH = "src/main/resources/META-INF/resources/images/games/";

    public static void main(String[] args) {
        BufferedImage bgImage = readImage("board","png");
        BufferedImage fgImage = readImage("bb","png");
        BufferedImage overlayedImage = overlayImages(bgImage,fgImage);
        writeImage(overlayedImage,"result","png");
    }

    public static BufferedImage overlayImages(BufferedImage background,BufferedImage foreground) {
        Graphics2D g = background.createGraphics();

        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        g.drawImage(background,null);

        g.drawImage(foreground,null);
        g.dispose();
        return background;
    }

    public static BufferedImage readImage(String fileNameWithoutExtension,String extension) {
        BufferedImage img = null;
        try {
            String path = IMAGE_SOURCE_PATH + fileNameWithoutExtension + "." + extension;
            img = ImageIO.read(new File(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return img;
    }

    public static void writeImage(BufferedImage img,String fileNameWithoutExtension,String extension) {
        try {
            String path = IMAGE_DEST_PATH + fileNameWithoutExtension + "." + extension;
            File outputFile = new File(path);
            ImageIO.write(img,extension,outputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

主要取自here

结果如下:

image with wrong overlay

怎么了?为什么渲染顶部图像的方式与单独查看时的方式不同?我该怎么做才能解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)