java实现 二维码生成 并 添加 附加信息

本文介绍如何在Java中结合ZXing库生成包含附加信息的二维码。通过首先创建BufferedImage,然后利用ZXing生成二维码并将其写入图片,最后添加额外的设备位置等信息,最终形成完整的二维码图片。

需求说明
在一些场景中,需要在二维码底部添加一些相关的信息,例如二维码表示一个设备时,下方显示该设备的位置信息
这里写图片描述

实现方式
首先,根据需求的长和宽生成一个BufferedImage

/**
         * 描述:建立布景并设置背景色
         * @author renpengfei
         * @since JDK 1.8
         */
        BufferedImage outputImage = new BufferedImage(DEVICE_QRCODE_WIDTH,DEVICE_IMG_HEIGHT,BufferedImage.TYPE_INT_RGB);
        Graphics g = outputImage.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0,0, DEVICE_QRCODE_WIDTH, DEVICE_IMG_HEIGHT);
        g.dispose();

随后,将二维码本身表达的信息使用 google的zxing生成

        /**
         * 生成二维码
         */
        ErrorCorrectionLevel level = ErrorCorrectionLevel.H;
        HashMap<EncodeHintType,Object> hints = new HashMap<EncodeHintType,Object>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, level);
        hints.put(EncodeHintType.MARGIN, 0);
        BitMatrix m = new MultiFormatWriter().encode(deviceQrcode, BarcodeFormat.QR_CODE, DEVICE_QRCODE_WIDTH, DEVICE_QRCODE_HEIGHT,hints);
        /**
         * 二维码写入到bufferedImage
        **/
        BufferedImage imageNew = new BufferedImage(DEVICE_QRCODE_WIDTH, DEVICE_QRCODE_HEIGHT,BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < DEVICE_QRCODE_WIDTH; x++) {
            for (int y = 0; y < DEVICE_QRCODE_HEIGHT; y++) {
                imageNew.setRGB(x, y, m.get(x, y) ? DEVICE_QRCODE_BLACK : DEVICE_QRCODE_WHITE);
            }
        }

然后将二维码写入BufferedImage中:

/**
         * 描述:添加二维码
         */
        int[] imageNewArray = new int[DEVICE_QRCODE_WIDTH*DEVICE_QRCODE_HEIGHT];
        imageNewArray = imageNew.getRGB(0,0,DEVICE_QRCODE_WIDTH,DEVICE_QRCODE_HEIGHT,imageNewArray,0,DEVICE_QRCODE_WIDTH);
        outputImage.setRGB(0,0,DEVICE_QRCODE_WIDTH,DEVICE_QRCODE_HEIGHT,imageNewArray,0,DEVICE_QRCODE_WIDTH);

将所需要的信息写入BufferedImage,这样就得到我们所需要的图片供后续操作,可以下载或者直接显示到页面中。

 Graphics gText = outputImage.createGraphics();
        gText.setColor(Color.black);
        gText.setFont(new Font("普通", Font.PLAIN, DEVICE_INFO_FONT_SIZE));

        gText.drawString(deviceInfo, 0, DEVICE_QRCODE_HEIGHT+DEVICE_INFO_FONT_SIZE);
        gText.dispose();
        return outputImage;

工具类:
http://download.youkuaiyun.com/download/qingfengilp/10256996

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值