• 二维码


    二维码简单介绍

    二维条形码是可以在行,列上进行信息的存储,用点(方点、圆点或其他形状)的出现表示二进制"1",点的不出现表示二进制的"0",常见的形状是矩阵型二维码

    目前矩阵型二维码流行的三大国际标准:

    1. PDF417:不支持中文
    2. DM:专利未公开,需要支付专利费用
    3. QR Code:专利公开,支持中文

    现在常用的就是QR Code,全称:Quick Response Code。这种标准识别速度比较快,占用空间也比较小,由日本发明,但是专利已经公开,可以放心使用

    QR Code存在一定的容错性,即使图形存在部分损坏,只要在一定的范围内也是可以识别的

    容错级别:

    • L级:约可纠错7%的数据码字
    • M级:约可纠错15%的数据码字,较为常用
    • Q级:约可纠错25%的数据码字
    • H级:约可纠错30%的数据码字

    如果设置的容错等级越高,可存入的数据就越少

    生成QR Code

    使用google-zxing工具生成/解析二维码,实际上这个工具不仅仅可以处理QR Code二维码,其他规范二维码,条形码等其他条码也是可以使用的,这里只记录下QR Code的使用方法,首先引入依赖

    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
        <version>3.4.0</version>
    </dependency>
    

    生成代码

    int width = 300;
    int height = 300;
    // 图片格式
    String format = "png";
    // 二维码数据内容
    String content = "https://www.cnblogs.com";
    
    // 定义二维码参数
    HashMap hints = new HashMap();
    // 设置字符集
    hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
    // 设置容错等级
    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
    // 设置二维码与外边框边距
    hints.put(EncodeHintType.MARGIN, 2);
    
    // 生成二维码
    try {
    	BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
    	// 这里使用文件路径的方式,也可以使用IO流的方式,将二维码作为响应流输出 MatrixToImageWriter.writeToStream
    	Path path = new File("D:/qrCode.png").toPath();
    	MatrixToImageWriter.writeToPath(bitMatrix, format, path);
    } catch (Exception e) {
    	e.printStackTrace();
    }
    

    生成的二维码如下

    解析QR Code

    MultiFormatReader reader = new MultiFormatReader();
    File file = new File("D:/qrCode.png");
    try {
    	BufferedImage bufferedImage = ImageIO.read(file);
    	BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(bufferedImage)));
    
    	// 定义二维码参数
    	HashMap hints = new HashMap();
    	// 设置字符集
    	hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
    
    	Result result = reader.decode(binaryBitmap, hints);
    	System.out.println("解析结果: " + result.toString());
    	System.out.println("二维码格式:" + result.getBarcodeFormat());
    	System.out.println("文本内容:" + result.getText());
    } catch (IOException e) {
    	e.printStackTrace();
    } catch (NotFoundException e) {
    	e.printStackTrace();
    }
    

    解析结果

    js生成QR Code

    除了使用Java生成/解析QR Code二维码,使用jQuery插件也可以,插件地址:jquery-qrcode

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <title>QR Code二维码</title>
    </head>
    <body>
        <div id="qrcode"></div>
    </body>
    <script type="text/javascript" src="jquery-3.1.1.min.js"></script>
    <script type="text/javascript" src="jquery.qrcode.min.js"></script>
    <script type="text/javascript">
    	$('#qrcode').qrcode({ 300, height: 300, text: "https://www.cnblogs.com"});
    </script>
    </html>
    
  • 相关阅读:
    重构第四天 : 用多态替换条件语句(if else & switch)
    MSBuild 教程(2)
    为什么Nhibernate中属性和方法必须Virtual的
    重构第三天:提升方法&下移方法
    重构第二天:移动方法
    重构第一天:封装集合
    MSbuild 教程
    工程经验总结之吹水"管理大境界"
    呕心沥血之作:完美解决Informix的中文乱码问题
    万事开头难——我的蛮荒时代
  • 原文地址:https://www.cnblogs.com/lz2017/p/12592670.html
Copyright © 2020-2023  润新知