条形码/二维码之开源利器ZXing图文介绍(转)

继前面介绍的一个日本开源软件(该软件只能实现QRCode)原文: Java实现二维码QRCode的编码和解码(http://sjsky.iteye.com/blog/1136934 ),今发现又一优秀的开源利器-- 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. 编码示例:

Java代码  

  1. package michael.zxing;
  2. import java.io.File;
  3. import java.util.Hashtable;
  4. import com.google.zxing.BarcodeFormat;
  5. import com.google.zxing.EncodeHintType;
  6. import com.google.zxing.MultiFormatWriter;
  7. import com.google.zxing.client.j2se.MatrixToImageWriter;
  8. import com.google.zxing.common.BitMatrix;
  9. import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
  10. /**
  11. * @blog http://sjsky.iteye.com
  12. * @author Michael
  13. */
  14. public class ZxingEncoderHandler {
  15. /**
  16. * 编码
  17. * @param contents
  18. * @param width
  19. * @param height
  20. * @param imgPath
  21. */
  22. public void encode(String contents, int width, int height, String imgPath) {
  23. Hashtable<Object, Object> hints = new Hashtable<Object, Object>();
  24. // 指定纠错等级
  25. hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
  26. // 指定编码格式
  27. hints.put(EncodeHintType.CHARACTER_SET, "GBK");
  28. try {
  29. BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
  30. BarcodeFormat.QR_CODE, width, height, hints);
  31. MatrixToImageWriter
  32. .writeToFile(bitMatrix, "png", new File(imgPath));
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. /**
  38. * @param args
  39. */
  40. public static void main(String[] args) {
  41. String imgPath = "d:/test/twocode/michael_zxing.png";
  42. String contents = "Hello Michael(大大),welcome to Zxing!"
  43. + "\nMichael’s blog [ http://sjsky.iteye.com ]"
  44. + "\nEMail [ [email protected] ]" + "\nTwitter [ @suncto ]";
  45. int width = 300, height = 300;
  46. ZxingEncoderHandler handler = new ZxingEncoderHandler();
  47. handler.encode(contents, width, height, imgPath);
  48. System.out.println("Michael ,you have finished zxing encode.");
  49. }
  50. }

运行后生成的二维码图片如下:

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

2-2. 解码示例:

Java代码  

  1. package michael.zxing;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import java.util.Hashtable;
  5. import javax.imageio.ImageIO;
  6. import com.google.zxing.BinaryBitmap;
  7. import com.google.zxing.DecodeHintType;
  8. import com.google.zxing.LuminanceSource;
  9. import com.google.zxing.MultiFormatReader;
  10. import com.google.zxing.Result;
  11. import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
  12. import com.google.zxing.common.HybridBinarizer;
  13. /**
  14. * @blog http://sjsky.iteye.com
  15. * @author Michael
  16. */
  17. public class ZxingDecoderHandler {
  18. /**
  19. * @param imgPath
  20. * @return String
  21. */
  22. public String decode(String imgPath) {
  23. BufferedImage image = null;
  24. Result result = null;
  25. try {
  26. image = ImageIO.read(new File(imgPath));
  27. if (image == null) {
  28. System.out.println("the decode image may be not exit.");
  29. }
  30. LuminanceSource source = new BufferedImageLuminanceSource(image);
  31. BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
  32. Hashtable<Object, Object> hints = new Hashtable<Object, Object>();
  33. hints.put(DecodeHintType.CHARACTER_SET, "GBK");
  34. result = new MultiFormatReader().decode(bitmap, hints);
  35. return result.getText();
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }
  39. return null;
  40. }
  41. /**
  42. * @param args
  43. */
  44. public static void main(String[] args) {
  45. String imgPath = "d:/test/twocode/michael_zxing.png";
  46. ZxingDecoderHandler handler = new ZxingDecoderHandler();
  47. String decodeContent = handler.decode(imgPath);
  48. System.out.println("解码内容如下:");
  49. System.out.println(decodeContent);
  50. System.out.println("Michael ,you have finished zxing decode.");
  51. }
  52. }

运行结果如下:

解码内容如下: Hello Michael(大大),welcome to Zxing! Michael’s blog [ http://sjsky.iteye.com ] EMail [ [email protected] ] Twitter [ @suncto ]  Michael ,you have finished zxing decode.

从测试结果可见:解码出的内容和之前编码的内容是一致

【三】、 条形码(EAN-13)的编码和解码演示:

3-1. 编码示例:

Java代码  

  1. package michael.zxing;
  2. import java.io.File;
  3. import com.google.zxing.BarcodeFormat;
  4. import com.google.zxing.MultiFormatWriter;
  5. import com.google.zxing.client.j2se.MatrixToImageWriter;
  6. import com.google.zxing.common.BitMatrix;
  7. /**
  8. * @blog http://sjsky.iteye.com
  9. * @author Michael
  10. */
  11. public class ZxingEAN13EncoderHandler {
  12. /**
  13. * 编码
  14. * @param contents
  15. * @param width
  16. * @param height
  17. * @param imgPath
  18. */
  19. public void encode(String contents, int width, int height, String imgPath) {
  20. int codeWidth = 3 + // start guard
  21. (7 * 6) + // left bars
  22. 5 + // middle guard
  23. (7 * 6) + // right bars
  24. 3; // end guard
  25. codeWidth = Math.max(codeWidth, width);
  26. try {
  27. BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
  28. BarcodeFormat.EAN_13, codeWidth, height, null);
  29. MatrixToImageWriter
  30. .writeToFile(bitMatrix, "png", new File(imgPath));
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. /**
  36. * @param args
  37. */
  38. public static void main(String[] args) {
  39. String imgPath = "d:/test/twocode/zxing_EAN13.png";
  40. // 益达无糖口香糖的条形码
  41. String contents = "6923450657713";
  42. int width = 105, height = 50;
  43. ZxingEAN13EncoderHandler handler = new ZxingEAN13EncoderHandler();
  44. handler.encode(contents, width, height, imgPath);
  45. System.out.println("Michael ,you have finished zxing EAN13 encode.");
  46. }
  47. }

6 923450 657713 对应的是益达无糖口香糖:

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

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

3-2. 解码示例:

Java代码  

  1. package michael.zxing;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import javax.imageio.ImageIO;
  5. import com.google.zxing.BinaryBitmap;
  6. import com.google.zxing.LuminanceSource;
  7. import com.google.zxing.MultiFormatReader;
  8. import com.google.zxing.Result;
  9. import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
  10. import com.google.zxing.common.HybridBinarizer;
  11. /**
  12. * @blog http://sjsky.iteye.com
  13. * @author Michael
  14. */
  15. public class ZxingEAN13DecoderHandler {
  16. /**
  17. * @param imgPath
  18. * @return String
  19. */
  20. public String decode(String imgPath) {
  21. BufferedImage image = null;
  22. Result result = null;
  23. try {
  24. image = ImageIO.read(new File(imgPath));
  25. if (image == null) {
  26. System.out.println("the decode image may be not exit.");
  27. }
  28. LuminanceSource source = new BufferedImageLuminanceSource(image);
  29. BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
  30. result = new MultiFormatReader().decode(bitmap, null);
  31. return result.getText();
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. return null;
  36. }
  37. /**
  38. * @param args
  39. */
  40. public static void main(String[] args) {
  41. String imgPath = "d:/test/twocode/zxing_EAN13.png";
  42. ZxingEAN13DecoderHandler handler = new ZxingEAN13DecoderHandler();
  43. String decodeContent = handler.decode(imgPath);
  44. System.out.println("解码内容如下:");
  45. System.out.println(decodeContent);
  46. System.out.println("Michael ,you have finished zxing EAN-13 decode.");
  47. }
  48. }

运行结果如下:

写道

解码内容如下: 6923450657713  Michael ,you have finished zxing decode.

从测试结果可见:解码出的内容和之前编码的内容是一致。

转载请注明来自:Michael‘s blog @ http://sjsky.iteye.com 
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------

http://sjsky.iteye.com/blog/1142177

时间: 2024-10-11 20:57:29

条形码/二维码之开源利器ZXing图文介绍(转)的相关文章

二维码扫描开源库ZXing定制化

(抱歉文章还在修改但是不小心发布了= =) 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. 我的代码库: https://github.com/SickWorm/ZXingDialog 代码没有在github维护,所以没有log.但是所有修改的地方我都加上了“@ch”的注释,以方便定位 官方源码: https://github.com/zxing/zxing 实现功能: 1.功能裁剪(只保留QRCode二维码扫描功能,去掉条形码等其他码扫描功能

ZBar 是款桌面电脑用条形码/二维码扫描工具

windows平台python 2.7环境编译安装zbar 最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图片扫描,支持多平台,例如 iPhone,Andriod 手机,同时 ZBar封装了二维码扫描的 API 开发包. ZBar 目前条码类型有:EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Int

实现扫描 一/二维码 -- ZBar开源SDK

一.下载ZBarSDK, 加入到工程中. 二.配置TARGETS和PROJECT 三.设置Link Binary With Libraries 四.  .m文件 #import "MQMainViewController.h" #import "ZBarSDK.h" @interface MQMainViewController () @end @implementation MQMainViewController - (void)viewDidLoad { [s

在DevExpress程序中使用条形码二维码控件,以及进行报表打印处理

在很多业务系统里面,越来越多涉及到条形码.二维码的应用了,不管在Web界面还是WInform界面都需要处理很多物料相关的操作,甚至很多企业为了减少录入错误操作,为每个设备进行条形码.二维码的标签,直接在流程中进行扫描处理,仅仅在界面勾选一些处理选项即可,极大提高工作效率,降低出错的几率.本篇随笔介绍如何在基于WInform的DevExpress程序中对条形码.二维码的处理,包括界面展示,报表打印等常规的处理. 1.DevExpress的条形码操作及报表打印 在15.1以上的DevEpxress版

atitit.二维码生成总结java zxing

#-----zxing类库.. but zxing3.0  的类库core-3.0.jar 需要jdk7 只好zing2.2.jar ..jdk6走ok兰.. 作者 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注明来源: http://blog.csdn.net/attilax #---qrcode.jsp <% sharex c=new com.xx.share.sharex(); String imgsrc=c.gene(request.get

简化至只剩条码和二维码扫描功能的ZXing

基于这位的源码修改的. http://blog.csdn.net/ryantang03/article/details/7831826 去除了他加入的生成二维码图片的功能,节约了一个包. 去掉了扫描成功后的音效,节约了一个音效文件. 去掉了闪光灯功能,晚上扫什么码赶紧睡觉.节约了一个类. 去掉了扫描超时,节约了两个类. 去掉了扫描界面的标题栏,节约了一个图片文件. 一切以易用为目的,zxing这玩意太麻烦了. 修改后的代码最后发. 要用的话,首先当然是复制文件. 1. libs文件夹里的jar包

个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码

根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下找个在线网站生成一下下载到本地,再复制粘贴一下,并不是什么多大问题的事情,但如果要批量处理,又如何呢?如果生成的二维码条形码,先进行排版一下打印出来,类似一个个标签或用作相应的产品说明的一部分,那又是怎样一种现成的解决方案呢?本次Excel催化剂再次刷新大家对Excel的认识,所有大家想做的事情,全

Python zxing 库解析(条形码二维码识别)

各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,python加载ZBar时各种报错.可能的原因是zbar的dll文件是32位的,而我系统是64位的,所以运行不了.只能自己拿源码编译一个64位的出来,对于我这种伸手党来说自己编译源码是难以接受的,所以就放弃了.后来看到文章说Zbar不能识别倾斜的条形码,而且也不能定位条形码区域. Zxing zbar不可

(转载)《打造极致二维码扫描系列》 -- ZXing开发详解

什么是ZXing? 在Android平台做过二维码相关模块的肯定都熟知ZXing开源项目,ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android.其GitHub地址是: https://github.com/zxing/zxing ZXing项目里面代码很多,实现的功能也很多,我们的应用只需要剥离其中的扫描模块即可,再多一点也就是生成二维码的