zoukankan      html  css  js  c++  java
  • Android zxing实现二维码生成和解析

    二维码的生成与解析。有多种途径。我选择用大品牌,google老大的zxing。

    gitHub链接是(我用的3.0.0,已经是nio了)

    https://github.com/zxing/zxing/tree/zxing-3.0.0

    // 其中输出图像和读取图像的类在core包  
      
    MultiFormatReader  
      
    MultiFormatWriter  
      
    // 生成矩阵的类在javase的包里  
      
    MatrixToImageWriter  

    pom.xml中的配置为

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
        <modelVersion>4.0.0</modelVersion>  
      
        <groupId>com.shihy</groupId>  
        <artifactId>qrcode</artifactId>  
        <version>0.0.1-SNAPSHOT</version>  
        <packaging>jar</packaging>  
      
        <name>qrcode</name>  
        <url>http://maven.apache.org</url>  
      
        <properties>  
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        </properties>  
      
        <dependencies>  
            <dependency>  
                <groupId>com.google.zxing</groupId>  
                <artifactId>core</artifactId>  
                <version>3.0.0</version>  
            </dependency>  
            <dependency>  
                <groupId>com.google.zxing</groupId>  
                <artifactId>javase</artifactId>  
                <version>3.0.0</version>  
            </dependency>  
            <dependency>  
                <groupId>junit</groupId>  
                <artifactId>junit</artifactId>  
                <version>4.10</version>  
            </dependency>  
            <dependency>  
                <groupId>com.alibaba</groupId>  
                <artifactId>fastjson</artifactId>  
                <version>1.1.29</version>  
            </dependency>  
        </dependencies>  
    </project>  

    生成图像与解析图像的测试工具类:

    package com.polysaas.edu.qrcode;  
      
    import java.awt.image.BufferedImage;  
    import java.io.File;  
    import java.io.IOException;  
    import java.nio.file.FileSystems;  
    import java.nio.file.Path;  
    import java.util.HashMap;  
    import java.util.Map;  
      
    import javax.imageio.ImageIO;  
      
    import org.junit.Test;  
      
    import com.alibaba.fastjson.JSONObject;  
    import com.google.zxing.BarcodeFormat;  
    import com.google.zxing.Binarizer;  
    import com.google.zxing.BinaryBitmap;  
    import com.google.zxing.DecodeHintType;  
    import com.google.zxing.EncodeHintType;  
    import com.google.zxing.LuminanceSource;  
    import com.google.zxing.MultiFormatReader;  
    import com.google.zxing.MultiFormatWriter;  
    import com.google.zxing.NotFoundException;  
    import com.google.zxing.Result;  
    import com.google.zxing.WriterException;  
    import com.google.zxing.client.j2se.BufferedImageLuminanceSource;  
    import com.google.zxing.client.j2se.MatrixToImageWriter;  
    import com.google.zxing.common.BitMatrix;  
    import com.google.zxing.common.HybridBinarizer;  
      
    public class QRCodeTest {  
      
        /** 
         * 生成图像 
         *  
         * @throws WriterException 
         * @throws IOException 
         */  
        @Test  
        public void testEncode() throws WriterException, IOException {  
            String filePath = "D://";  
            String fileName = "zxing.png";  
            JSONObject json = new JSONObject();  
            json.put(  
                    "zxing",  
                    "https://github.com/zxing/zxing/tree/zxing-3.0.0/javase/src/main/java/com/google/zxing");  
            json.put("author", "shihy");  
            String content = json.toJSONString();// 内容  
            int width = 200; // 图像宽度  
            int height = 200; // 图像高度  
            String format = "png";// 图像类型  
            Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();  
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content,  
                    BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵  
            Path path = FileSystems.getDefault().getPath(filePath, fileName);  
            MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像  
            System.out.println("输出成功.");  
        }  
      
        /** 
         * 解析图像 
         */  
        @Test  
        public void testDecode() {  
            String filePath = "D://zxing.png";  
            BufferedImage image;  
            try {  
                image = ImageIO.read(new File(filePath));  
                LuminanceSource source = new BufferedImageLuminanceSource(image);  
                Binarizer binarizer = new HybridBinarizer(source);  
                BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);  
                Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();  
                hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");  
                Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码  
                JSONObject content = JSONObject.parseObject(result.getText());  
                System.out.println("图片中内容:  ");  
                System.out.println("author: " + content.getString("author"));  
                System.out.println("zxing:  " + content.getString("zxing"));  
                System.out.println("图片中格式:  ");  
                System.out.println("encode: " + result.getBarcodeFormat());  
            } catch (IOException e) {  
                e.printStackTrace();  
            } catch (NotFoundException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    测试生成图像为:


    解析到的内容为:

    图片中内容:    
    author: shihy  
    zxing:  https://github.com/zxing/zxing/tree/zxing-3.0.0/javase/src/main/java/com/google/zxing  
    图片中格式:    
    encode: QR_CODE  
  • 相关阅读:
    C++中函数模板template的使用
    C++中模板template和类class的结合使用
    Python中shuffle函数
    Python中利用tkinter模块构建图形用户界面GUI
    Python中怎样初始化一个类类class?
    Python中字典的has_key方法在3.4版本中改为in
    Python中怎样对数据集整体进行映射转换类型
    matlab中怎样对矩阵的某一列进行排序而使得其他列对应移动??
    Python中怎样使用shape计算矩阵的行和列
    27.反射2.md
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6226105.html
Copyright © 2011-2022 走看看