文档章节

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

secondriver
 secondriver
发布于 2015/09/17 09:24
字数 915
阅读 79
收藏 0

  今天是尝试了一下二维码生成使用的是谷歌提供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 字符串比较。


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


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

@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中生成的二维码解码,查看二维码包含的信息。


@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
粉丝 10
博文 229
码字总数 233821
作品 0
广州
程序员
私信 提问
zxing 如何识别反转二维码

说起二维码扫描,估计很多人用的是 zxing 吧。 然而 zxing 虽然好用,但是却有一些坑。 这边分析一下自己实际项目遇到的一个坑。 什么坑呢? 下面举个栗子你就懂了。 这边生成二维码使用的是...

AndroidTraveler
2018/07/23
0
0
ZXing读写二维码,桌面和手机的不同用法

虽然ZXing是用Java实现的Barcode开源库,但是并不代表桌面上实现的Barcode应用在手机上也可以直接使用。因为Android的Java接口有很多是不同的。这里分享下Java Barcode生成和读取的不同用法。...

yushulx
2015/08/18
727
0
利用iText和zxing生成和读pdf417二维码

前面的一些博文中已经提到了zxing这个开源工具生成和读取二维码图片,仅从学习的角度来看,可以告一个段落。在实际的生产环境中,应用zxing生成和读取二维码,却存在一些问题: 使用扫描枪读...

彭苏云
2014/03/06
3.3K
0
生成二维码的开源工具对比(附源码了呀!)

原文:生成二维码的开源工具对比(附源码了呀!) 某天发现生成二维码的工具(zxing)运行的很慢,于是乎上网上寻找生成二维码的工具,发现常见的开源工具有如下三种: Zxing(zxing.dll) Th...

杰克.陈
2018/07/03
0
0
Java js 生成二维码 解析二维码

1.二维码分类   二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型。 线性堆叠式二维码 编码原理: 建立在一维条码基础之上,按需要堆积成两行或多行。 图示: 2. 矩阵...

haoyuehong
2018/06/28
146
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
24分钟前
15
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
25分钟前
13
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
29分钟前
13
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
38分钟前
12
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
41分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部