在一张背景图上面插入另一张图片,合成为一张图片(使用场景:背景图中插入二维码等)

DBC 60 0

代码如下

    /**
     *
     * @param gb 背景图 例子 :new File(backPicPath)、new ClassPathResource("img/xxx.jpg").getInputStream()
     * @param cg 子图片(二维码) 例子 :new File(backPicPath)、new ClassPathResource("img/xxx.jpg").getInputStream()
     * @param filePath 输出最终图片的位置 如 D:\jar\111.png
     * @param cgx 加是向右,减是向左
     * @param cgy 加是向下,减是向上
     * @param cgw 合成的子图片大小 如:二维码大小 宽度
     * @param cgh 合成的子图片大小 如:二维码大小 高度
     */
    public static final void compositePicture(InputStream gb,InputStream cg, String filePath,Integer cgx,Integer cgy,
                                              Integer cgw,Integer cgh) {
        try (InputStream gbStream = gb;
             InputStream cgStream = cg;
             FileOutputStream fos = new FileOutputStream(filePath)) {

            BufferedImage big = ImageIO.read(gbStream);
            BufferedImage small = ImageIO.read(cgStream);

            Graphics2D g = big.createGraphics();
            g.drawImage(small, cgx, cgy, cgw, cgh, null);
            g.dispose();

            ImageIO.write(big, "png", fos);
        } catch (IOException e) {
        }
    }

简单调用

    public static void main(String[] args) throws IOException {
        compositePicture(
                new ClassPathResource("img/微信图片_20230629140957.jpg").getInputStream(),
                new ClassPathResource("img/微信图片_20230629140957.jpg").getInputStream(),
                "D:\\jar\\111.png",
                270,270,150,150);
    }
温馨提示

如果需要反复生成,可以将对应能够复用的流放在内存中,避免多次读取磁盘中的文件产生不必要的耗时。最终合成的图片效果如下,理论上经过自己的改编可以实现各种图片的合成操作[aru_51]

合成结果

在一张背景图上面插入另一张图片,合成为一张图片(使用场景:背景图中插入二维码等)插图

发表评论 取消回复
表情 图片 链接 代码

分享