您的位置:首页 > 其它

zxing实现二维码生成和解析

2015-12-15 09:28 537 查看

zxing实现二维码生成和解析

博客分类:

二维码 zxing

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

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

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

Java代码


// 其中输出图像和读取图像的类在core包

MultiFormatReader

MultiFormatWriter

// 生成矩阵的类在javase的包里

MatrixToImageWriter

pom.xml中的配置为

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>

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

Java代码


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();

}

}

}

测试生成图像为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: