通过java实现合成海报

1.合成海报保存到本地

    public static void drawImage(double x,double y,String backgroundUrl,String qrCodeUrl,String text,Integer color) throws IOException {
        BufferedImage bgBufImage = ImageIO.read(new URL(backgroundUrl));  //获取图片
        Graphics2D bgBufImageGraphics = bgBufImage.createGraphics();    //创建一个图形

        BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeUrl)); //获取图片

        Integer width = Integer.valueOf(new BigDecimal(x * bgBufImage.getWidth() / 100).setScale(0, BigDecimal.ROUND_HALF_UP).toString());
        Integer height = Integer.valueOf(new BigDecimal(y * bgBufImage.getHeight() / 100).setScale(0, BigDecimal.ROUND_HALF_UP).toString());

        bgBufImageGraphics.drawImage(qrCodeImage, width, height, qrCodeImage.getWidth(), qrCodeImage.getHeight(), null);  //设置图片的位置
        if (!StringUtils.isEmpty(text)){
            bgBufImageGraphics.setColor(new Color(color));
            bgBufImageGraphics.setFont(new Font("黑体",Font.PLAIN, 47));

            FontMetrics fm = bgBufImageGraphics.getFontMetrics(new Font("黑体",Font.PLAIN, 47));
            int textWidth = fm.stringWidth(text);
            int qrCodeWidth = qrCodeImage.getWidth();

            bgBufImageGraphics.drawString(text,width + ((qrCodeWidth - textWidth) / 2),(height - 50));
        }

        bgBufImageGraphics.dispose();

        ImageIO.write(bgBufImage, "png", new File("D:\\file\\demo1.png"));
        System.out.println("生成图片完成");
    }

 

2.合成海报保存到oss服务器

public String compositePoster(double x,double y,String backgroundUrl,String qrCodeUrl,String text,Integer color) throws IOException {
        BufferedImage bgBufImage = ImageIO.read(new URL(backgroundUrl));  //获取图片
        Graphics2D bgBufImageGraphics = bgBufImage.createGraphics();    //创建一个图形

        BufferedImage qrCodeImage = ImageIO.read(new URL(qrCodeUrl)); //获取图片

        Integer width = Integer.valueOf(new BigDecimal(x * bgBufImage.getWidth() / 100).setScale(0, BigDecimal.ROUND_HALF_UP).toString());
        Integer height = Integer.valueOf(new BigDecimal(y * bgBufImage.getHeight() / 100).setScale(0, BigDecimal.ROUND_HALF_UP).toString());

        bgBufImageGraphics.drawImage(qrCodeImage, width, height, qrCodeImage.getWidth(), qrCodeImage.getHeight(), null);  //设置图片的位置
        if (!StringUtils.isEmpty(text)){
            bgBufImageGraphics.setColor(new Color(color));
            bgBufImageGraphics.setFont(new Font("黑体",Font.PLAIN, 47));

            FontMetrics fm = bgBufImageGraphics.getFontMetrics(new Font("黑体",Font.PLAIN, 47));
            int textWidth = fm.stringWidth(text);
            int qrCodeWidth = qrCodeImage.getWidth();

            bgBufImageGraphics.drawString(text,width + ((qrCodeWidth - textWidth) / 2),(height - 50));
        }
        bgBufImageGraphics.dispose();

        ByteArrayOutputStream bs = new ByteArrayOutputStream();
        ImageOutputStream imgOut = ImageIO.createImageOutputStream(bs);
        ImageIO.write(bgBufImage, "png", imgOut);
        InputStream inSteam = new ByteArrayInputStream(bs.toByteArray());
        String fileName = URLDecoder.decode(backgroundUrl.split("/")[backgroundUrl.split("/").length -1 ], "UTF-8");
        String uuid =  UUID.randomUUID().toString() + ".png";
        ossUtils.uploadFiles(inSteam,uuid,fileName);
        return ossUtils.getObjectUrl(uuid);
    }

 

传入的参数

 

合成的效果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值