用com.google.zxing生成、解析二维码
2011-02-21 13:40
351 查看
在http://code.google.com/p/zxing/downloads/list下载zxing压缩包(我用的Zxing-1.5),解压后将core/src和javase/src中的com文件夹整体复制到你的java工程中,这两个包里面包含java所用的java源码,
代码如下:
package com.easyoa.test;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.ByteMatrix;
import com.google.zxing.common.HybridBinarizer;
public class Test {
private static final int BLACK = 0xff000000;
private static final int WHITE = 0xFFFFFFFF;
/**
* @param args
*/
public static void main(String[] args) {
Test test=new Test();
test.encode();
test.decode();
}
//编码
/**
* 在编码时需要将com.google.zxing.qrcode.encoder.Encoder.java中的
* static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";修改为UTF-8,否则中文编译后解析不了
*/
public void encode(){
try {
String str = "姓名:张三,性别:男,年龄:25,籍贯:中国北京,";// 二维码内容
String path = "D://test.png";
ByteMatrix byteMatrix;
byteMatrix= new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 200, 200);
File file = new File(path);
writeToFile(byteMatrix, "png", file);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeToFile(ByteMatrix matrix, String format, File file)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
ImageIO.write(image, format, file);
}
public static BufferedImage toBufferedImage(ByteMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) == 0 ? BLACK:WHITE);
}
}
return image;
}
//解码
public void decode(){
try{
Reader reader = new MultiFormatReader();
String imgPath = "D://test.png";
File file = new File(imgPath);
BufferedImage image;
try {
image = ImageIO.read(file);
if (image == null) {
System.out.println("Could not decode image");
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Result result;
Hashtable hints= new Hashtable();
hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
//解码设置编码方式为:utf-8,
result = new MultiFormatReader().decode(bitmap,hints);
String resultStr = result.getText();
System.out.println("解析后内容:"+resultStr);
} catch (IOException ioe) {
System.out.println(ioe.toString());
} catch (ReaderException re) {
System.out.println(re.toString());
}
}catch(Exception ex){
System.out.println(ex.toString());
}
}
}
好了,运行一下是不是很简单?
生成后的二维码:
解码后:
解析后内容:姓名:张三,性别:男,年龄:25,籍贯:中国北京,
欢迎朋友留言交流;
代码如下:
package com.easyoa.test;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.ByteMatrix;
import com.google.zxing.common.HybridBinarizer;
public class Test {
private static final int BLACK = 0xff000000;
private static final int WHITE = 0xFFFFFFFF;
/**
* @param args
*/
public static void main(String[] args) {
Test test=new Test();
test.encode();
test.decode();
}
//编码
/**
* 在编码时需要将com.google.zxing.qrcode.encoder.Encoder.java中的
* static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";修改为UTF-8,否则中文编译后解析不了
*/
public void encode(){
try {
String str = "姓名:张三,性别:男,年龄:25,籍贯:中国北京,";// 二维码内容
String path = "D://test.png";
ByteMatrix byteMatrix;
byteMatrix= new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 200, 200);
File file = new File(path);
writeToFile(byteMatrix, "png", file);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeToFile(ByteMatrix matrix, String format, File file)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
ImageIO.write(image, format, file);
}
public static BufferedImage toBufferedImage(ByteMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) == 0 ? BLACK:WHITE);
}
}
return image;
}
//解码
public void decode(){
try{
Reader reader = new MultiFormatReader();
String imgPath = "D://test.png";
File file = new File(imgPath);
BufferedImage image;
try {
image = ImageIO.read(file);
if (image == null) {
System.out.println("Could not decode image");
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Result result;
Hashtable hints= new Hashtable();
hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
//解码设置编码方式为:utf-8,
result = new MultiFormatReader().decode(bitmap,hints);
String resultStr = result.getText();
System.out.println("解析后内容:"+resultStr);
} catch (IOException ioe) {
System.out.println(ioe.toString());
} catch (ReaderException re) {
System.out.println(re.toString());
}
}catch(Exception ex){
System.out.println(ex.toString());
}
}
}
好了,运行一下是不是很简单?
生成后的二维码:
解码后:
解析后内容:姓名:张三,性别:男,年龄:25,籍贯:中国北京,
欢迎朋友留言交流;
相关文章推荐
- 用com.google.zxing生成、解析二维码(转)
- Google Zxing 二维码生成与解析
- google zxing 生成和解析二维码
- 动态生成二维码 com.google.zxing
- com.google.zxing生成的二维码自定义白边大小
- Google Zxing 二维码生成与解析
- Google Zxing 二维码生成与解析
- google zxing 生成和解析二维码
- Google Zxing 二维码生成与解析
- 利用google Zxing 二维码生成与解析
- 二维码的生成和解析(包括QRCode.jar和google的zxing.jar)
- 简单封装Google的二维码生成/解析工具——zxing
- 用com.google.zxing生成QR code矩阵二维码
- Android及Java使用google.zxing生成和解码(解析)二维码(QRCode)
- Java 二维码生成和解析的简单实现(谷歌Google.zxing)
- Android学习之 google Zxing 二维码条形码生成与解析
- 使用ZXing工具类生成和解析二维码
- 基于zxing生成与解析二维码、条形码
- [置顶] Android扫一扫(Zxing),闪光灯,生成二维码图片,解析二维码(条码)等
- 使用zxing生成与解析二维码