记录:使用Zxing二维码生成前前后后

简介:

  今天是尝试了一下二维码生成使用的是谷歌提供Java实现Zxing包。

  Zxing这个组件针对不同的平台,语言有不同的支持,这里使用的是JavaSECLient实现。


  Zxing项目的地址:http://code.google.com/p/zxing/ 下载下来会看到只有源代码而没有对应的Jar,Zxing.2.3 将之前的Ant构建换成了Maven来进行管理。


  1.使用Maven对Zxing的核心代码(core文件夹下)进行编译打包,这个时候有个问题要注意了,JDK版本问题,编译版本1.7, 如果是1.6或者更低将会提示unsupported major.minorversion 51

  关于JDK编译器版本这篇博文写的很清晰:

http://www.blogjava.net/Jay2009/archive/2009/04/23/267108.html

  2.Google提供的JavaSE客户端生成二维码的代码

这里要依赖Zxing文件夹下javase目录下的代码,注意问题:Google提供的javaSEClient代码实现使用了JDK提供的特性,这里要使用JDK 7,或者认为的将这些代码做一些修改,来兼容JDK 6.


   Zxing提供的核心代码和支持组件代码都用到了JDK7的一些特性比如:异常扑捉,Switch 字符串比较。


1
2
3
try  (Writer out =  new  OutputStreamWriter( new  FileOutputStream(file), UTF8)) {
      out.write(value);
    }


  对网址:http://aiilive.blog.51cto.com  生成二维码代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Test
     public  void  test1() {
         Hashtable<EncodeHintType, String> hints =  new  Hashtable<EncodeHintType, String>();
         hints.put(EncodeHintType.CHARACTER_SET,  "UTF8" );
         BitMatrix bmx;
         String contents =  "http://aiilive.blog.51cto.com" ;
         try  {
             bmx =  new  MultiFormatWriter().encode(contents,
                     BarcodeFormat.QR_CODE,  450 450 , hints);
             File file =  new  File( "51cto.png" );
             MatrixToImageWriter.writeToFile(bmx,  "png" , file);
         catch  (WriterException e) {
             e.printStackTrace();
         catch  (IOException e) {
             e.printStackTrace();
         }
     }


  注:MaxtrixToImageWriter类是google提供的JavaSE支持组件。

  生成效果图:

wKiom1LWTGbT70qFAACx0N5PO3c629.jpg

  3.Google提供的JavaSE客户端解码二维码图片

    对2中生成的二维码解码,查看二维码包含的信息。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Test
     public  void  test2(){
         File file =  new  File( "51cto.png" );
         BufferedImage bufferedImage =  null ;
         try  {
             bufferedImage = ImageIO.read(file);
         catch  (IOException e) {
             e.printStackTrace();
         }
         LuminanceSource lus =  null ;
         lus =  new  BufferedImageLuminanceSource(bufferedImage);
         BinaryBitmap bm =  new  BinaryBitmap( new  HybridBinarizer(lus));
         Hashtable<DecodeHintType, String> hints =  new  Hashtable<DecodeHintType, String>();
         hints.put(DecodeHintType.CHARACTER_SET,  "UTF8" );
         try  {
             Result result =  new  MultiFormatReader().decode(bm, hints);
             System.out.println(result.getText());
         catch  (NotFoundException e) {
             e.printStackTrace();
         }
     }


  注:界面后打印输出的内容是:http://aiilive.blog.51cto.com 这里可以通过手机的二维码扫描软件查看。


  4.关于使用Zxing生成二维码解码报NotFoundException异常问题

    网上有朋友遇到Zxing生成的二维码进行解码的时候报出NotFoundException异常问题我也遇到了,很多朋友说是Zxing的Bug。

   我在使用Maven对源码进行编译的时候提示编译unsupported major.minorversion 51.这个与我的编译环境有关系,当时默认的JDK1.6.x,当我重新下载了最新版本的JDKjdk1.7.0_45并设置为编译环境,这个时候对源代码编译成功,并且再次运行3中的代码仍然是unsupported major.minor version51这个问题,这个时候就是开发工具热的祸了,Eclipse中要设置对于的JRE和编译版本。这样这个问题就解决了。




   通过使用Zxing生成二维码过程中遇到了这些问题多源于JDK环境问题和目前JDK版本的重大升级。

   这里附上一张JDK编译版本的说明:

wKiom1LWULnRP6pGAAPbudf1qTs219.jpg


j_0001.gif二维码的发明创造了一种信息传递的方式,商业上也得到广泛的应用,专业的二维码在线生成网站如:http://cli.im/ 提供了更多的生成类型。

    百度百科:http://baike.baidu.com/link?url=LggPQvxJpMW6dcUWSZVjLs2IgqbNotqeiZDCLNnyyIorX4h7U1ovOzVyFnLCRZ1f ;

   36Kr:

   http://www.36kr.com/p/35225.html

   二维码也算是一种改变生活的东西,看到专业二维码生成提供商不由的赞叹,商业眼光独到,用之其极。




本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1352004,如需转载请自行联系原作者

相关文章
|
编解码 Android开发
Android中二维码的扫描与生成(zxing库)( 二 )
上一篇讲了zxing的理论知识,这一篇直接给大家上代码吧
278 0
|
Java Android开发
Android中二维码的扫描与生成(zxing库)( 一 )
zxing是google推出的一个开源的二维码框架,可以实现使用手机的摄像头完成二维码的扫描和解码
406 0
28用zxing对二维码的解析
28用zxing对二维码的解析
98 0
27.用zxing生成二维码
27.用zxing生成二维码
182 0
|
Java
java 基于QRCode、zxing 的二维码生成与解析
本文属于《JavaEE实战——从本地到云端》 什么是二维码?请参考:二维码详解 java 生成二维码 QRCode、zxing 两种方式 1、下载所需要的 jar 包 所需要的 jar 包下载地址:java生成二维码所需要的QRCode、zxing Jar包 如果你想自行分别下载: zxing github地址:https://github.
2073 0