Java之—hutool工具类二维码生成跟背景图合并输出

主要是集合hutool工具的使用,简单方便。

获取二维码

 /**
     * 根据内容 获取二维码
     * @param content 内容
     * @return
     */
    @Override
    public BufferedImage getQrCode(String content,int width, int height) {

        //二维码设置
        QrConfig config = QrCodeUtils.getConfig(width, height);
        //生成指定url对应的二维码到文件,宽和高都是300像素
        BufferedImage bufferedImage = QrCodeUtil.generate(
                content,
                config);
        // 插入图片
        return bufferedImage;
    }

 我为了公用都会单独拿出来定义一个设置方法

/**
     * 二维码基础设置
     * @param width 宽 300 
     * @param height 长 300
     * @return
     */
    public static QrConfig getConfig(int width, int height){
        //300,300
        QrConfig config = new QrConfig(width, height);
        // 设置边距,既二维码和背景之间的边距
        config.setMargin(2);
        // 设置前景色,既二维码颜色(青色)
        config.setForeColor(Color.BLACK);
        // 设置背景色(灰色)
        config.setBackColor(Color.WHITE);
        /**高纠错级别 :像素块小,允许遮挡一定范围,但是像素块更密集*/
        config.setErrorCorrection(ErrorCorrectionLevel.H);
        return config;
    }

一,该方式为文件格式,主要用于自测和获取本地文件(不适用pass平台和服务器)

/**
     * 两个图片合并(加文字) 文件格式
     * @param sourceUrl 底部背景图
     * @param config 二维码基础配置
     * @param qrContent 二维码内容
     * @param qrX 二维码横坐标
     * @param qrY 二维码纵坐标
     * @param textContent 文字(一般为标题)
     * @param textFontSize 文字大小
     * @param textFontX 文字的横坐标
     * @param textFontY 文字的纵坐标
     * @return
     */
    @Override
    public ByteArrayInputStream getQrCodeUrl(String sourceUrl,
                               QrConfig config,
                               String qrContent,
                               int qrX,
                               int qrY,
                               String textContent,
                               int textFontSize,
                               int textFontX,
                               int textFontY) {
        //二维码设置
//        QrConfig config = QrCodeUtils.getConfig();
        //1,生成二维码
        BufferedImage qrImage = QrCodeUtil.generate(qrContent, config);

        // 2,将图片合成在一起
        Image image = ImgUtil.pressImage(
                //底图
                ImgUtil.read(sourceUrl),
                //二维码图(水印图)
                qrImage,
//                ImgUtil.read(codeFile),
                qrX,
                //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                qrY,
                //透明度
                1.0f
        );
        //3,加文字
        Image pressTextImage = ImgUtil.pressText(
                image,
                //title
                textContent,
                //颜色
                Color.WHITE,
                //字体 42
                new Font("黑体", Font.BOLD, textFontSize),
                //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                textFontX,
                //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                textFontY,
                //透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
                1.0f
        );
        //转为流
        ByteArrayInputStream inputStream = ImgUtil.toStream(pressTextImage, QrCodeUtils.FORMAT_NAME);
        return inputStream;
    }

 二,输入输出流格式(重点,常用)

1,将网图或者本地的图片转为输入流。

2,然后再创建临时的输出流文件,将生成的图片放到流中,因为在pass平台,或者服务器上读不到file的文件的,要转成流格式。

3,输出生成的图片流,用流的方式进行上传阿里云华为云都行。

/**
     * 网络底图转为流,返回流格式,两个图片合并(加文字)  


     * @param sourceUrl 底部背景图
     * @param config 二维码基础配置
     * @param qrContent 二维码内容
     * @param qrX 二维码横坐标
     * @param qrY 二维码纵坐标
     * @param textContent 文字(一般为标题)
     * @param textFontSize 文字大小
     * @param textFontX 文字的横坐标
     * @param textFontY 文字的纵坐标
     * @return
     */
    @Override
    public ByteArrayInputStream getQrCodeUrl(String sourceUrl,
                               QrConfig config,
                               String qrContent,
                               int qrX,
                               int qrY,
                               String textContent,
                               int textFontSize,
                               int textFontX,
                               int textFontY) {
        //二维码设置
//        QrConfig config = QrCodeUtils.getConfig();
        //1,生成二维码
        BufferedImage qrImage = QrCodeUtil.generate(qrContent, config);
        //将网络图转换成流
        BufferedImage image = QrCodeUtils.stringTobufferedImage(sourceUrl);
        InputStream inputStream = ImgUtil.toStream(image, QrCodeEnum.CodeEnum.PNG.getDesc());
        //定义临时输出流
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        // 2,将图片合成在一起
        ImgUtil.pressImage(
                inputStream,
                outputStream,
                qrImage,
                qrX,
                //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                qrY,
                //透明度
                QrCodeUtils.ALPHA

        );
        //3,加文字
        ByteArrayInputStream input = new ByteArrayInputStream(outputStream.toByteArray());
        ByteArrayOutputStream resultOut = new ByteArrayOutputStream();
        ImgUtil.pressText(
                input,
                resultOut,
                //title
                textContent,
                //颜色
                Color.WHITE,
                //字体 42
                new Font(QrCodeEnum.CodeEnum.FONT_NAME.name(), Font.BOLD, textFontSize),
                //x坐标修正值。 默认在中间,偏移量相对于中间偏移
                textFontX,
                //y坐标修正值。 默认在中间,偏移量相对于中间偏移
                textFontY,
                //透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
                QrCodeUtils.ALPHA
        );

        ByteArrayInputStream result = new ByteArrayInputStream(resultOut.toByteArray());
        return result;
    }

 使用到的自定义封装的工具类,图片输入输出流转换工具类:Java之~hutool二维码工具类自定义QrCodeUtils,图片输入输出流转换_萍宝儿的博客-CSDN博客

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值