Android 实现二维码生成和解析

来源:互联网 发布:java常用算法手册 宋娟 编辑:程序博客网 时间:2024/06/08 06:04

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

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

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

 

 

// 其中输出图像和读取图像的类在core包MultiFormatReaderMultiFormatWriter// 生成矩阵的类在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 */@Testpublic 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("输出成功.");}/** * 解析图像 */@Testpublic 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:shihyzxing:https://github.com/zxing/zxing/tree/zxing-3.0.0/javase/src/main/java/com/google/zxing图片中格式:encode:QR_CODE
0 0
原创粉丝点击