【问题标题】:Weird behaviour when overlaying PNGs覆盖 PNG 时的奇怪行为
【发布时间】:2021-06-09 20:09:24
【问题描述】:

我想将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, 0, 0, null);

        g.drawImage(foreground, 0, 0, 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

结果如下所示:

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

【问题讨论】:

  • 尝试添加 g.setRenderingHints(KEY_COLOR_RENDERING, VALUE_COLOR_RENDER_QUALITY)。另见javadoc
  • 不会改变结果 :(

标签: java png bufferedimage graphics2d


【解决方案1】:

背景图片的颜色配置文件一定有问题。我使用 GIMP 将其转换为 jpg 并转换回 png,现在它工作正常;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多