旁白:

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

废话不多说了,入题吧!

转自:http://www.open-open.com/lib/view/open1355055725476.html

概念:

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

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

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

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

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

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

地址就是:http://mvnrepository.com/artifact/com.google.zxing(里面版本自己找吧,这里提醒读者,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<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();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有依赖了。

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

http://stackoverflow.com/questions/4839734/java-unsupported-major-minor-version-49-0-where-is-it-coming-from

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

代码下载地址:http://download.csdn.net/detail/tvcctv27tv/6840955

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

java二维码小试牛刀相关推荐

  1. Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...

  2. java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例

    java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍  这里我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream o ...

  3. java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成、解析、下载

    java二维码生成 使用SSM框架 搭建属于自己的APP二维码合成.解析.下载 自己用java搭建一个属于自己APP二维码合成网站.我的思路是这样的: 1.用户在前台表单提交APP的IOS和Andro ...

  4. java二维码的生成工具

    java二维码的生成工具 1.导入jar包,我是用的是一个谷歌提供的 <dependency><groupId>com.google.zxing</groupId> ...

  5. 【笔记11】uniapp点击复制;mysql数据库存储emoji表情;Java 二维码生成;uniapp引入自定义图标

    目录 前言 一.uniapp 实现点击复制某段文本 二.MySQL 数据库存储 emoji 表情 三.Layui 的富文本编辑器 四.谷歌 Java 二维码生成 (1) 引入 MAVEN 依赖 五.微 ...

  6. java二维码编码生成并转换成流传入前端页面

    java二维码编码生成并转换成流传入前端页面 这里主要用了com.google.zxing的依赖,这个依赖主要可以完成图片叠加.二维码生成和图片加文字等功能. ①添加依赖 <dependency ...

  7. java 二维码生成和解析

    2019独角兽企业重金招聘Python工程师标准>>> <!-- 二维码 --><dependency><groupId>com.google.z ...

  8. java二维码生成与解析代码实现

    TwoDimensionCode类:二维码操作核心类 package qrcode;import java.awt.Color; import java.awt.Graphics2D; import ...

  9. java二维码生成并可以转换

    二维码很常见,简单的二维码生成 pom中导入两个包 <!--二维码--><dependency><groupId>com.google.zxing</grou ...

最新文章

  1. oracle mod结果不正确,日常问题解决记录三:记一次Win10安装Oracle11g后遇到的问题...
  2. poj2217详解 ( 后缀数组 + 高度数组 )
  3. 钢材种类有哪些?怎么分类
  4. catia的vh轴怎么显示_Origin入门教程(三):Origin中曲线怎么平移?
  5. 他修复了程序员吃饭的bug,估值已超过10亿美金!9.9元,2顿饭.....
  6. An internal error occurred while showing an internal error.
  7. 机器学习之EM算法的原理推导及相关知识总结
  8. yaml 文件内部使用变量赋值的方式_spring boot 学习笔记5(application.yaml 配置文件)...
  9. java 获取组件大小_java - 如何初始化取决于组件大小的图像抓取? - 堆栈内存溢出...
  10. java abs在哪个包,Java StrictMath abs()方法
  11. 基于51单片机毕业设计 开题选题
  12. PHP 大数据处理思路
  13. 714. 买卖股票的最佳时机含手续费
  14. springboot banner制作
  15. vue-cli2.x旧版本卸载不掉的问题解决方案(亲测+踩坑)附Vue脚手架安装教程
  16. 【文件包含漏洞03】文件包含漏洞的空字符绕过及六种利用方式
  17. 一款原型设计工具“墨刀”的介绍
  18. DML语句(delete,insert,update)
  19. 数据库之快照读与当前读
  20. Chatbot-检索式模型介绍(三)

热门文章

  1. html元素自己属性代码,jQuery如何操作HTML的元素和属性?(代码详解例)
  2. 刷新按钮_处理数据透视表的隐藏选项(四):固定报表刷新前后的列宽和格式...
  3. 16 bit float 存储_小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)...
  4. python内置哪些装饰器_Python内置的wraps装饰器有什么用
  5. mysql undrop_MySQL · 数据恢复 · undrop-for-innodb
  6. 华为鸿蒙系统深度体验报告,堪比苹果IOS的存在!
  7. HDU-1686Oulipo(kmp)
  8. Ankhsvn 改名出错
  9. 小微型库(1.获取元素的API)
  10. webrequest HttpWebRequest webclient/HttpClient