条形码/二维码之开源利器ZXing图文介绍
全文目录:
- 基本介绍
- 二维码(比如:QRCode)的编码和解码演示
- 条形码(比如:EAN-13)的编码和解码演示
【一】、 基本介绍 :
1-1. ZXing是一个开源Java类库用于解析多种格式的条形码和二维码.
官网:http://code.google.com/p/zxing/
截止目前为止最新版本为1.7,提供以下编码格式的支持:
- UPC-A and UPC-E
- EAN-8 and EAN-13
- Code 39
- Code 93
- Code 128
- QR Code
- ITF
- Codabar
- RSS-14 (all variants)
- Data Matrix
- PDF 417 ('alpha' quality)
- Aztec ('alpha' quality)
同时官网提供了 Android、cpp、C#、iPhone、j2me、j2se、jruby、objc、rim、symbian等多种应用的类库,具体详情可以参考下载的源码包中。
1-2. 本文和之前的那篇文章一样,主要是在PC上实现条形码(EAN-13)和二维码(QRCode) 的编码和解码的示例,以供大家参考,用到了源码中core和javase下面的相关源代码,附件提供自己编译之后的lib包:
有关各种手机系统的应用,有兴趣的朋友可以下载官方源码包,包下有具体详细的应用介绍。
【二】、 二维码(QRCode)的编码和解码演示:
2-1. 编码示例:
package michael.zxing; import java.io.File;
import java.util.Hashtable; import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; /**
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class ZxingEncoderHandler { /**
* 编码
* @param contents
* @param width
* @param height
* @param imgPath
*/
public void encode(String contents, int width, int height, String imgPath) {
Hashtable<Object, Object> hints = new Hashtable<Object, Object>();
// 指定纠错等级
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
// 指定编码格式
hints.put(EncodeHintType.CHARACTER_SET, "GBK");
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
BarcodeFormat.QR_CODE, width, height, hints); MatrixToImageWriter
.writeToFile(bitMatrix, "png", new File(imgPath)); } catch (Exception e) {
e.printStackTrace();
}
} /**
* @param args
*/
public static void main(String[] args) {
String imgPath = "d:/test/twocode/michael_zxing.png";
String contents = "Hello Michael(大大),welcome to Zxing!"
+ "\nMichael’s blog [ http://sjsky.iteye.com ]"
+ "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto ]";
int width = 300, height = 300;
ZxingEncoderHandler handler = new ZxingEncoderHandler();
handler.encode(contents, width, height, imgPath); System.out.println("Michael ,you have finished zxing encode.");
}
}
运行后生成的二维码图片如下:

用手机的二维码扫描软件(本人用的:android 快拍二维码 )来测试下,识别成功的截图如下:

2-2. 解码示例:
package michael.zxing; import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer; /**
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class ZxingDecoderHandler { /**
* @param imgPath
* @return String
*/
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)); Hashtable<Object, Object> hints = new Hashtable<Object, Object>();
hints.put(DecodeHintType.CHARACTER_SET, "GBK"); result = new MultiFormatReader().decode(bitmap, hints);
return result.getText();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* @param args
*/
public static void main(String[] args) {
String imgPath = "d:/test/twocode/michael_zxing.png";
ZxingDecoderHandler handler = new ZxingDecoderHandler();
String decodeContent = handler.decode(imgPath);
System.out.println("解码内容如下:");
System.out.println(decodeContent);
System.out.println("Michael ,you have finished zxing decode."); }
}
运行结果如下:
从测试结果可见:解码出的内容和之前编码的内容是一致
【三】、 条形码(EAN-13)的编码和解码演示:
3-1. 编码示例:
package michael.zxing; import java.io.File; import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix; /**
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class ZxingEAN13EncoderHandler { /**
* 编码
* @param contents
* @param width
* @param height
* @param imgPath
*/
public void encode(String contents, int width, int height, String imgPath) {
int codeWidth = 3 + // start guard
(7 * 6) + // left bars
5 + // middle guard
(7 * 6) + // right bars
3; // end guard
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();
}
} /**
* @param args
*/
public static void main(String[] args) {
String imgPath = "d:/test/twocode/zxing_EAN13.png";
// 益达无糖口香糖的条形码
String contents = "6923450657713"; int width = 105, height = 50;
ZxingEAN13EncoderHandler handler = new ZxingEAN13EncoderHandler();
handler.encode(contents, width, height, imgPath); System.out.println("Michael ,you have finished zxing EAN13 encode.");
}
}
6 923450 657713 对应的是益达无糖口香糖:

运行后生成的条形码图片如下:

用手机的扫描软件,识别成功的截图如下:

3-2. 解码示例:
package michael.zxing; import java.awt.image.BufferedImage;
import java.io.File; import javax.imageio.ImageIO; import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer; /**
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class ZxingEAN13DecoderHandler { /**
* @param imgPath
* @return String
*/
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;
} /**
* @param args
*/
public static void main(String[] args) {
String imgPath = "d:/test/twocode/zxing_EAN13.png";
ZxingEAN13DecoderHandler handler = new ZxingEAN13DecoderHandler();
String decodeContent = handler.decode(imgPath);
System.out.println("解码内容如下:");
System.out.println(decodeContent);
System.out.println("Michael ,you have finished zxing EAN-13 decode."); }
}
运行结果如下:
从测试结果可见:解码出的内容和之前编码的内容是一致。
条形码/二维码之开源利器ZXing图文介绍的更多相关文章
- 条形码/二维码之开源利器ZXing图文介绍(转)
继前面介绍的一个日本开源软件(该软件只能实现QRCode)原文: Java实现二维码QRCode的编码和解码(http://sjsky.iteye.com/blog/1136934 ),今发现又一优秀 ...
- Android二维码识别 开源项目ZXing的编译
Android二维码识别 开源项目ZXing的编译 Android端的条形码/二维码识别功能 因为手机端的输入不是很方便,所以条形码/二维码的扫描是一种很有效的解决手段. 比较流行的手机应用中,常用的 ...
- 二维码扫描开源库ZXing定制化【转】
转自:http://www.cnblogs.com/sickworm/p/4562081.html 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. ...
- 二维码扫描开源库ZXing定制化
最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. 建议: 如果需要集成到自己的app上,而不是做一个demo,不推荐用ZXing的Android外围开 ...
- iOS 二维码扫描 通过ZBar ZXing等第三方库
扫描二维码的开源库有很多如 ZBar.ZXing等 ZBar的使用方法: 下载ZBar SDK 地址https://github.com/bmorton/ZBarSDK ZBarSDK是一个开源的SD ...
- 在DevExpress程序中使用条形码二维码控件,以及进行报表打印处理
在很多业务系统里面,越来越多涉及到条形码.二维码的应用了,不管在Web界面还是WInform界面都需要处理很多物料相关的操作,甚至很多企业为了减少录入错误操作,为每个设备进行条形码.二维码的标签,直接 ...
- ZBar 是款桌面电脑用条形码/二维码扫描工具
ZBar 是款桌面电脑用条形码/二维码扫描工具 windows平台python 2.7环境编译安装zbar 最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本 ...
- atitit.二维码生成总结java zxing
atitit.二维码生成总结java zxing #-----zxing类库.. but zxing3.0 的类库core-3.0.jar 需要jdk7 只好zing2.2.jar ..jdk6走o ...
- DevExpress 使用条形码二维码控件打印
参考文章: https://www.cnblogs.com/wuhuacong/p/6112976.html 转载请注明出处:撰写人:伍华聪 其实主要是二维码的实现,在使用条形码控件时,又一个属性Sy ...
随机推荐
- 乱七八糟 Nodejs 系列一:试水
看Nodejs比较舒服的人,个人认为主要是: 以前是后端,转成前端的人: 前端巨牛的人: 后端巨牛的人: 巨牛的人... 当然还有我这种,脑抽不止的人~~ 不过学习的过程中发现,如果不是上来就用exp ...
- IE,火狐,谷歌浏览器下js判断滚动条是否已拉到页面最底部
E/FF/Chrome下document.documentElement和document.body的 scrollHeight/scrollTop/clientHeight 以及判断滚动条是否已拉到 ...
- 40条优化php代码的小实例
1.如果一个方法能被静态,那就声明他为静态的,速度可提高1/4; 2.echo的效率高于print,因为echo没有返回值,print返回一个整型; 3.在循环之前设置循环的最大次数,而非在在循环中; ...
- Ubuntu 下安装使用文件比较合并图形工具Meld
Meld是一款跨平台的文件比较合并工具使用Python开发,具体内容参照官网:http://meldmerge.org/ 注意以下环境要求: Requirements Python 2.7 (Pyth ...
- 怪胎:Android开发ImageView图片无法显示
今天碰到一个非常奇怪的问题: 在Android中ImageView无法显示加载的本地SDCard图片. 具体过程是:先调用本地照相机程序摄像,然后将拍摄的图片加载在ImageView中显示. publ ...
- 新技术:Qt for Native Client (and emscripten)
http://blog.qt.io/blog/2015/09/25/qt-for-native-client-and-emscripten/
- shell中的IFS详解
在bash中IFS是内部的域分隔符,manual中对其的叙述如下:IFS The Internal Field Separator that is used for word splitting af ...
- 关于bootstrap--表单(水平表单)
在Bootstrap框架中要实现水平表单效果,必须满足以下两个条件:1.在<form>元素是使用类名“form-horizontal”.2.配合Bootstrap框架的网格系统.(网格布局 ...
- IEEE论文格式要求
0.特别提示:本次会议要求各位作者根据审稿意见进行认真修改,然后经过大会主席的检查合格才允许上传IEEE eXpress,主要的目的是为了保证论文集的质量,不让论文格式出现五花八门的情况,确保会议后被 ...
- Java 高效 MVC & REST 开发框架 JessMA v3.2.1 即将发布
JessMA(原名:Portal-Basic)是一套功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 ...