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

本文介绍了如何在Java中使用ZXing开源库进行二维码和条形码的编码与解码。首先从Google官网下载并导入ZXing类库,然后通过示例代码展示如何生成和读取二维码及条形码。通过打包ZXing为jar文件,避免与项目冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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类库文件


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

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


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

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

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

2、选择 Java->JAR file

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


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

}
}

生成的二维码:


二维码解析的结果如下:



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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值