java使用Google.zxing编、解二维码,条形码

zxing是Google的一个专门用于编、解二维码,条形码的开源项目,使用和操作都很方便。zxing不尽支持Java而且还支持其他比如Android、cpp、C#、iPhone、j2me、j2se、jruby、objc、rim、symbian等多种应用的类库。自己可以根据需要添加所需类库。本篇文章参考了http://www.open-open.com/lib/view/open1345039836522.html中的部分类型。

第一步:在Google的官网 http://code.google.com/p/zxing/下载zxing的类库,下载后将其解压。压缩文件盒解压的文件以及解压文件的文件目录如下:


zxing类库文件

java使用Google.zxing编、解二维码,条形码_第1张图片

第二步:将 zxing-master\core\src\main\java 目录下和 zxing-master\javase\src\main\java 目录下所有文件拷贝你的项目当中。

此时你的项目结构如下图所示:

java使用Google.zxing编、解二维码,条形码_第2张图片

由于zxing的类库比较多,有时可能和自己的package混淆。此时有两种选择:一是就在当前工程中开发自己的项目,自己的包创建时和zxing类库区别明显;二是将该包打包成jar文件,另外创建一个工程来开发自己的项目,只要将打包的jar文件拷贝到新创建的工程中即可。

这里我们采用第二种方法,即将工程打包成jar文件。利用Eclipse自带的打包工具可以将工程打包成jar文件。具体步骤如下:

1、右击项目 选择 ---》Export

2、选择 Java->JAR file

3、点击下一步,选择jar文件的放置路径,并选择相关的选项,如下图:

java使用Google.zxing编、解二维码,条形码_第3张图片

4、点击finish,到指定的路径下将jar文件拷贝你的项目中。

第三步:二维码的编码和解码,示例代码如下:

package com.xie.qrcode;


import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;


import com.google.zxing.BarcodeFormat;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.Result;
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;
import com.google.zxing.qrcode.QRCodeReader;
import com.google.zxing.qrcode.QRCodeWriter;


public class QrZxing {


@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception {

/**二维码生成**/

/**二维码内容**/
String content = "小孩,hello zxing" ;

/**内容的格式,如果有中文的话必须转码,**/
content = new String(content.getBytes("UTF-8"), "ISO-8859-1") ;

/**二维码图片的保存路径**/
String imagePath = "D:\\qrCode.jpg" ;
File file = new File(imagePath) ;

/**构造二维码,宽高分别为200、200**/
QRCodeWriter writer = new QRCodeWriter() ;
BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, 200, 200) ;
MatrixToImageWriter.writeToFile(matrix, "jpg", file);
//------------------------------------------------------------------------>
/**二维码解析**/
QRCodeReader reader = new QRCodeReader();

/**获取二维码图片对象**/
        BufferedImage image = ImageIO.read(file);  
        LuminanceSource source = new BufferedImageLuminanceSource(image);  
        Binarizer binarizer = new HybridBinarizer(source );  
        BinaryBitmap imageBinaryBitmap = new BinaryBitmap(binarizer);
        Result result = reader.decode(imageBinaryBitmap);
        
        System.out.println("result = "+ result.toString());  
        System.out.println("resultFormat = "+ result.getBarcodeFormat());  
        System.out.println("resultText = "+ result.getText()); 

}
}

生成的二维码:

java使用Google.zxing编、解二维码,条形码_第4张图片

二维码解析的结果如下:



条形码的编码、解码和二维码的编码、解码相似,这里只贴出其代码。

package com.xie.qrcode;


import java.awt.image.BufferedImage;
import java.io.File;


import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
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 BarCode {


/** 条形码编码 **/
public void encode(String contents, int width, int height, String imgPath) {
int codeWidth = 3 +(7 * 6) + 5 +(7 * 6) + 3;
codeWidth = Math.max(codeWidth, width);
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
BarcodeFormat.EAN_13, codeWidth, height, null);
MatrixToImageWriter
.writeToFile(bitMatrix, "png", new File(imgPath));
} catch (Exception e) {
e.printStackTrace();
}
}


/** 条形码解码 **/
public String decode(String imgPath) {
BufferedImage image = null;
Result result = null;
try {
image = ImageIO.read(new File(imgPath));
if (image == null) {
System.out.println("the decode image may be not exit.");
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
result = new MultiFormatReader().decode(bitmap, null);
return result.getText();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


public static void main(String[] args) {


/** 编码 **/
String imgPath = "d:/zxing_EAN13.png";
// 益达无糖口香糖的条形码
String contents = "6923450657713";


int width = 105, height = 50;
BarCode barCode = new BarCode();
barCode.encode(contents, width, height, imgPath);


/** 解码 **/
String decodeContent = barCode.decode(imgPath);
System.out.println("解码内容如下:");
System.out.println(decodeContent);
}
}

你可能感兴趣的:(Java)