zxing生成二维码生成并添加附加信息

2018-04-14 21:09:12
885次阅读
0个评论
需求说明 

在一些场景中,需要在二维码底部添加一些相关的信息,例如二维码表示一个设备时,下方显示该设备的位置信息 


实现方式 
首先,根据需求的长和宽生成一个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;
收藏00

登录 后评论。没有帐号? 注册 一个。