博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java二维码小试牛刀
阅读量:5158 次
发布时间:2019-06-13

本文共 4161 字,大约阅读时间需要 13 分钟。

旁白:

  由于工作需要,要做一个java的二维码的图片,花了2天的时间学习了一下,过程中也遇到了一些问题,这里做个笔记,收藏了。

废话不多说了,入题吧!

转自:

概念:

  二维码,又称 二维条码二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动 识别功能、及处理图形旋转变化等特点。

1.java这边的话生成二维码有很多开发的jar包如zxing,qrcode(前者是谷歌开发的后者则是小日本开发的,这里的话我使用zxing的开发包来弄。

  ZXing项目是google code上面提供的一个关于条码编解码的开源项目。
2.先下载zxing开发包,这里用到的只是core那个jar包(这里需要j2me和core两个包)
这里说一下zxing的下载:

1. 源码zip包的下载地址为:。要对项目进行二次开发,首先你需要在中下载ZXing的zip源代码解压文件,你会看到里面有很多文件夹,包括J2SE的,Android的,J2ME,C#等等。这里以J2SE为例。需要使用里面的Core和J2SE文件夹。然后导入到你在Eclipse中创建的工程。

上面的方式需要粘入相当多的代码,个人不太喜欢,所以上面的解决方案就是把上面的东西写到一个单独的java project里打个jar包,就很方便了。

2. 与其打个jar包不如直接下载一个jar不就解决了吗,OK,呦呦,这个主意不错,灵感突发滴结果!哦耶!BU...T,JAR哪里找呢,哪里找啊哪里找!哎....!

地址就是:(里面版本自己找吧,这里提醒读者,2.3的话好像是对jdk1.7有依赖了,如果阁下的是1.7前的,2.2版是没问题的,这个我已经测试过了!)

A. core为zxing的核心代码,包括encode和decode的代码;

B. javase可以定义为一个辅助代码,主要提供一些工具类。

比如:读取image的代码类ImageReader、写image到文件的类MatrixToImageWriter。充分使用zxing的javase模块提供的工具类,既方便了代码的编写工作,又避免了上网找一些类似的代码。

代码:

使用zxing开发还需要一个类,代码如下(原作者代码写出的图片中用手机扫出的汉字为乱码问题,这里做了修改):

package com.horizon.action;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Hashtable;import javax.imageio.ImageIO;import com.google.zxing.BarcodeFormat;import com.google.zxing.BinaryBitmap;import com.google.zxing.DecodeHintType;import com.google.zxing.LuminanceSource;import com.google.zxing.MultiFormatReader;import com.google.zxing.MultiFormatWriter;import com.google.zxing.ReaderException;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 TestEnDeCode {    public TestEnDeCode() {    }    /**     * @param args     */    public static void main(String[] args) {        TestEnDeCode t = new TestEnDeCode();        t.encode();        t.decode();    }    // 编码    public void encode() {        try {            String str = "CN:男;COP:公司;ZW:职务";// 二维码内容            String path = "D:\\hwy.png";            BitMatrix byteMatrix;            byteMatrix = new MultiFormatWriter().encode(                 // 在Zxing转码之前,手动转码,避免了中文乱码的错误                     new String(str.getBytes(), "iso-8859-1"),                 BarcodeFormat.QR_CODE, 200, 200);            File file = new File(path);            MatrixToImageWriter.writeToFile(byteMatrix, "png", file);        } catch (Exception e) {            e.printStackTrace();        }    }    // 解码    public void decode() {        try {            String imgPath = "D:\\hwy.png";            File file = new File(imgPath);            BufferedImage image;            try {                image = ImageIO.read(file);                if (image == null) {                    System.out.println("Could not decode image");                }                LuminanceSource source = new BufferedImageLuminanceSource(image);                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(                        source));                Result result;                Hashtable
hints = new Hashtable
(); hints.put(DecodeHintType.CHARACTER_SET, "UTF-8"); result = new MultiFormatReader().decode(bitmap, hints); String resultStr = result.getText(); System.out.println(resultStr); } catch (IOException ioe) { System.out.println(ioe.toString()); } catch (ReaderException re) { System.out.println(re.toString()); } } catch (Exception ex) { } }}

问题总结:

1. ZXing扫描二维码出现中文乱码的问题:

 ZXing扫条形码没有问题,但是扫描二维码的时候却有一部分是乱码,或者不是中文的问题。

只要以ISO-8859-1的格式来编码,取出结果再进行相应的转换,问题就解决了,并不需要修改源码,可以参考上面的代码。

2. 报错:java.lang.UnsupportedClassVersionError: com/google/zxing/client/j2se/MatrixToImageWriter

遇到这个问题的话,98%的概率是JDK的版本与ZXing版不搭了,上面已经说过了,2.2版本在JDK1.6应该是没问题的,2.3的话应该是对JDK1.7有依赖了。

读者可以试试别的版本,这里有个链接可以解释的:

喜欢追求技术真谛的小伙伴们可以研究下啊。

代码下载地址:

转载于:https://www.cnblogs.com/tv151579/p/3516531.html

你可能感兴趣的文章
OperationalError:(1054 - "Unknown column 'game.lable1' in 'field list' ")解决办法
查看>>
震惊!小学生的300道四则运算题目竟然是这样做出来的!
查看>>
百度BAE环境下WordPress安装教程
查看>>
windows索引服务
查看>>
Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
查看>>
微信支付结果通用通知
查看>>
Android API Guides---Tasks and Back Stack
查看>>
Android中Handler使用浅析
查看>>
搜狗语音云开发入门(二)——使用离线语音识别服务
查看>>
C - The C Answer (2nd Edition) - Exercise 1-4
查看>>
转载的吐槽文
查看>>
[问题解决]Fresco设置圆角效果不生效问题探究
查看>>
Sourcetree 集成 Azure DevOps Server(Git)
查看>>
CIFAR-10数据集读取
查看>>
选择排序、冒泡排序、获取数组中的最大值
查看>>
Windows 2008 R2 SP1部署WSUS 3.0 SP2
查看>>
CentOS 7下安装Logstash ELK Stack 日志管理系统(下)
查看>>
Android Start感触
查看>>
freemarker 自己定义指令
查看>>
【MyEclipse 2015】 逆向破解实录系列【2】(纯研究)
查看>>