《二维码篇:》《二维码生成的一个工具类》

2021-01-20 16:00:32 浏览数 (1)

概述

一、导入依赖

原始库 javase内部封装可调用这个库

代码语言:javascript复制
<dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.3</version>
        </dependency>

二、utils工具类

使用其中一个就可以,其他的只是参数不同,用来调整生成二维码的宽高,颜色的。content是一个字符串

代码语言:javascript复制
package com.qf.push.gua;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;

/**
 * zt
 * 2020/12/15
 * 9:39
 * 二维码工具类
 */
public class QRCodeUtils {
    /**
     * 生成二维码的方法
     */
    public static BufferedImage qr(String content){
        //定义二维码的宽、高
        int width = 300;
        int height = 300;
        //EncodeHintType 它是一个二维码的特征信息常量
        Map<EncodeHintType,Object> hints = new HashMap<>();
        //比如,纠错能力
        hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.MARGIN,1);
        BitMatrix bitMatrix = null;
        try {
            //生成一个二维码的工具
            bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,hints);
            //第一个参数是信息块的颜色
            MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0X00FFFFFF,0XFFFFFFFF);
            //第一个参数是二维码数据,它描述了那个位置有信息,那个位置没有信息,第二个参数描述了填充成图片的时候使用的颜色
            BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix,matrixToImageConfig);
            return bufferedImage;
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 生成二维码的方法
     */
    public static BufferedImage qr3(String content, Color color){
        //定义二维码的宽、高
        int width = 300;
        int height = 300;
        //EncodeHintType 它是一个二维码的特征信息常量
        Map<EncodeHintType,Object> hints = new HashMap<>();
        //比如,纠错能力
        hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.MARGIN,1);

        BitMatrix bitMatrix = null;
        BufferedImage bufferedImage = null;
        try {
            //生成一个二维码的工具
            bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,hints);
            //第一个参数是信息块的颜色
            MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(color.getRGB(),0XFFFFFFFF);
            //第一个参数是二维码数据,它描述了那个位置有信息,那个位置没有信息,第二个参数描述了填充成图片的时候使用的颜色
            bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix,matrixToImageConfig);
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return bufferedImage;
    }

    /**
     * 生成二维码的方法
     */
    public static BufferedImage qr2(String content, Color color,int w,int h){
        //定义二维码的宽、高
        //EncodeHintType 它是一个二维码的特征信息常量
        Map<EncodeHintType,Object> hints = new HashMap<>();
        //比如,纠错能力
        hints.put(EncodeHintType.CHARACTER_SET,"utf-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.MARGIN,1);
        BitMatrix bitMatrix = null;
        try {
            //生成一个二维码的工具
            bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, w, h,hints);
            //第一个参数是信息块的颜色
            MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(color.getRGB(),0XFFFFFFFF);
            //第一个参数是二维码数据,它描述了那个位置有信息,那个位置没有信息,第二个参数描述了填充成图片的时候使用的颜色
            BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix,matrixToImageConfig);
            return bufferedImage;
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }
}

三、QRController

代码语言:javascript复制
package com.qf.push.gua;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * zt
 * 2020/12/15
 * 9:49
 */
@Controller
@RequestMapping("/qrcode")
public class QRController {

    @RequestMapping("/show")
    public void qrcode(HttpServletResponse response) throws IOException {
        //生成一个二维码图片
        BufferedImage buff = QRCodeUtils.qr("https://www.baidu.com");
        //把图片输出给浏览器
        response.setContentType("image/png");
        ServletOutputStream outputStream = response.getOutputStream();
        ImageIO.write(buff, "png", outputStream);
    }

    @RequestMapping("/show2")
    public void qrcode2(HttpServletResponse response, @RequestParam String color) throws IOException {
        //生成一个二维码图片
        BufferedImage buff = null;

        if("green".equalsIgnoreCase(color)){
            buff=QRCodeUtils.qr3("https://www.baidu.com", Color.GREEN);
        }else if("red".equalsIgnoreCase(color)){
            buff=QRCodeUtils.qr3("https://www.baidu.com", Color.RED);
        }else{
            buff=QRCodeUtils.qr("https://www.baidu.com");
        }
        //把图片输出给浏览器
        response.setContentType("image/png");
        ServletOutputStream outputStream = response.getOutputStream();
        ImageIO.write(buff, "png", outputStream);
    }

}

四、运行结果

0 人点赞