zoukankan      html  css  js  c++  java
  • 二维码生成读取简单示例

    二维码生成读取简单示例

    、摘要

    二维码又称二维条码,常见的二维码为QR CodeQR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

    二、背景

    自从微信面世以来,二维码更是得到了广泛的传播。生成二维码有很多jar包可以实现,例如Zxing,QRcode,前者是谷歌的,后者日本的,现在用zxing以及jquery-qrcode来生成二维码,读取二维码信息。

    三、推广建议

    学习可快速完成生成二维码。

    四、正文

    下载源码链接:

    https://github.com/jeromeetienne/jquery-qrcode

    https://github.com/zxing

    Zxing生成二维码

    Pom.xml

    <!-- https://mvnrepository.com/artifact/com.google.zxing/core  -->
    <dependency>
       <groupId>com.google.zxing</groupId>
       <artifactId>core</artifactId>
       <version>3.3.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
    <dependency>
       <groupId>com.google.zxing</groupId>
       <artifactId>javase</artifactId>
       <version>3.3.3</version>
    </dependency>
    
     
    
    package cn.ltian.zxing;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    
    import java.io.File;
    import java.nio.file.Path;
    import java.util.HashMap;
    
    public class QRCode {
    
        /**
         * 创建二维码,写入文件
         * @param content 文本信息
         * @param format 图片格式
         * @param width 宽度
         * @param heigth 高度
         * @param filePath 文件地址
         */
        public static void CreateQRCode(String content,String format,int width,int heigth,String filePath){
    
    //        int width = 300;
    //        int heigth = 300;
    //        String format = "png";
    //        String content = "www.baidu.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,heigth,hints);
    
                Path file;
                file = new File(filePath).toPath();
    
    //            writeToFile(bitMatrix,format,file);
                MatrixToImageWriter.writeToPath(bitMatrix,format,file);
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }
    
     
    
    Zxing读取二维码
    package cn.ltian.zxing;
    
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.Result;
    import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
    import com.google.zxing.common.HybridBinarizer;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.util.HashMap;
    
    public class ReadQRCode {
    
        /**
         * 读取二维码信息
         * @param filePath 文件地址
         * @return
         */
        public static Result readQRcode(String filePath) {
            Result result = null;
            try {
                MultiFormatReader multiFormatReader = new MultiFormatReader();
    
                File file = new File(filePath);
    
                BufferedImage image = ImageIO.read(file);
    
                BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
    
                HashMap hints = new HashMap();
                hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    
                result = multiFormatReader.decode(binaryBitmap, hints);
    
    
                System.out.println("解析结果:" + result.toString());
                System.out.println("二维码格式类型:" + result.getBarcodeFormat());
                System.out.println("二维码文本类型:" + result.getText());
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    }
    
     
    
    jquery-qrcode生成二维码
    <!DOCTYPE html>
    <html lang="en">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head>
    <title>basic example</title>
    </head>
    <body>
    <script src="../../js/jquery-1.11.1.min.js"></script>
    
    <!--<script type="text/javascript" src="../jquery.qrcode.min.js"></script>
    --><script type="text/javascript" src="../../js/jquery.qrcode.js"></script>
    <script type="text/javascript" src="../../js/qrcode.js"></script>
    
    <p>Render in table</p>
    <div id="qrcodeTable"></div>
    <p>Render in canvas</p>
    <div id="qrcodeCanvas"></div>
    
    <a id="download" download="qrcode.jpg"></a>
    <a id="saveQrCode" style="cursor: pointer;">下载二维码</a>
    
    </a>
    <script>
       //jQuery('#qrcode').qrcode("this plugin is great");
       jQuery('#qrcodeTable').qrcode({
          render : "table",
          text   : "http://jetienne.com"
       });    
    
    jQuery('#qrcodeCanvas').qrcode({
        render    : "canvas",
        text    : "http://www.baidu.com",
        width : "200",               //二维码的宽度
        height : "200",              //二维码的高度
        background : "#ffffff",       //二维码的后景色
        foreground : "#000000",        //二维码的前景色
        src: 'logo.png'             //二维码中间的图片
    });  
    
    $('#saveQrCode').click(function(){
        var canvas = $('#qrcodeCanvas').find("canvas").get(0);
        console.log(canvas);
            try {//解决IE转base64时缓存不足,canvas转blob下载
            var blob = canvas.msToBlob();
            navigator.msSaveBlob(blob, 'qrcode.jpg');
        } catch (e) {//如果为其他浏览器,使用base64转码下载
            var url = canvas.toDataURL('image/jpeg');
            $("#download").attr('href', url).get(0).click();
        }
            return false;
    });
    </script>
    
    
    
    </body>
    </html>
    
     
  • 相关阅读:
    SQL SERVER 2012修改数据库名称(包括 db.mdf 名称的修改)
    vmware三种网络模式
    指针
    linux 中 开放端口,以及防火墙的相关命令
    数据库备份的脚本,记录下,还需优化下
    遍历 目录的几种有效办法
    转。git 乌龟的使用安装
    centos 时区正确,时间不对
    locate
    从 零开始 无差错 装好nginx+PHP
  • 原文地址:https://www.cnblogs.com/ltian123/p/10457738.html
Copyright © 2011-2022 走看看