java利用zxing来生成和解析二维码,支持中文
java在二维码的生成和解析上,网上有些人说如果要解析中文,得去修改工具包的Encoder类中的 static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";
将编码改成utf-8或者gbk,这种方式可行,不过破坏了封装的原则,而且还得重新编译,特别是这种依赖于第三方的东西,如果谷歌将zXing包又升级了,而你也想跟着升级
到最新的版本,是不是又得去改一次那个编码,然后再编译一次替换,这样的话这种处理方式不是那么的方便,事实上其实可以不用去改里面的编码,我们只要在解析和
生成的时候将中文字符串转化一下就可以了,下面是java利用zxing包对相关信息生成和解析二维码的一个简单代码,可参照一下,暂时我就用这种方式处理
package com.gen;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Map;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
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.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
/**
* 简单利用谷歌的zXing包来生成和解析二维码QRCode
*
* @date 2014-06-12
* @author aGuang
*
*/
public class QrCode {
//此处定义颜色的16位进制值,可换其他颜色,不过一般使用黑白颜色来生成
private static final int BLACK = 0xff000000;
private static final int WHITE = 0xFFFFFFFF;
/**
* @param args
*/
public static void main(String[] args) {
QrCode qrc = new QrCode();
//文件的后缀名
String filePostfix = "png";
File file = new File("C:/Users/Administrator/Desktop/二维码." + filePostfix);
String context = "中文测试" + 123 + ",./";
//调用封装的生成函数
qrc.encode(context, file, filePostfix, BarcodeFormat.QR_CODE,
200, 200, null);
qrc.decode(file);
}
/**
*
* 此处生成QRCode二维码<br>
*
* @param contents
* 二维码的内容
* @param file
* 二维码生成的文件
* @param filePostfix
* 生成二维码图片的格式,可以用PNG或JPG或GIF等等
* @param format
* qrcode码的生成格式
* @param width
* 图片宽度
* @param height
* 图片高度
* @param hints
*/
public void encode(String contents, File file, String filePostfix,
BarcodeFormat format, int width, int height,
Map<EncodeHintType, ?> hints) {
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(new String(contents.getBytes("GBK"),"ISO8859-1"),
format, width, height);
catchToFile(bitMatrix, filePostfix, file);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成二维码图片<br>
*
* @param matrix
* @param format
* 图片格式
* @param file
* 生成二维码图片位置
* @throws IOException
*/
public static void catchToFile(BitMatrix matrix, String format, File file)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
ImageIO.write(image, format, file);
}
/**
* 生成二维码内容<br>
*
* @param matrix
* @return
*/
public static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) == true ? BLACK : WHITE);
}
}
return image;
}
/**
* 解析二维码内容
*/
@SuppressWarnings("unchecked")
public void decode(File file) {
try {
BufferedImage image;
try {
image = ImageIO.read(file);
if (image == null) {
System.out.println("该文件不能解码");
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
source));
Result result;
Hashtable hints = new Hashtable();
// 解码设置编码方式为:GBK
hints.put(DecodeHintType.CHARACTER_SET, "GBK");
result = new MultiFormatReader().decode(bitmap, hints);
String resultStr = result.getText();
System.out.println("解析后的内容为:" + resultStr);
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (ReaderException re) {
re.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
注:当前二维码的生成及解析另外需要依赖于包zxing 的core.jar 与javase.jar
javase.jar下载http://download.csdn.net/detail/aguang_vip/7487129
core.jar下载http://download.csdn.net/detail/aguang_vip/7487117
java利用zxing来生成和解析二维码,支持中文相关推荐
- C#利用ZXing.Net生成条形码,二维码和带Logo的二维码
本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...
- java生成与解析二维码 支持插入图片与文字
1.依赖: <!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><g ...
- 使用zxing生成与解析二维码
随着二维码的普及,二维码在生活中的使用使用的场景也越来越来多,本文章就来介绍使用zxing来生成与解析二维码.生成二维码的开源项目很多,选择zxing则是因为其出自Google并且长期有人进行维护,值 ...
- Java实现生成和解析二维码
Java实现生成和解析二维码 文章目录 Java实现生成和解析二维码 一.建立项目 二.创建工具类 三.创建启动类 一.建立项目 首先需要创建一个普通的 Maven 项目,在这里我用的是 google ...
- Java生成和解析二维码工具类(简单经典)
Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...
- java生成以及解析二维码
java生成以及解析二维码 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 ...
- Zxing和QR CODE 生成与解析二维码实例(普通篇)
首先下载对应的jar包,本实例用的是Zxing2.2jar 下载地址:http://download.csdn.net/detail/gao36951/8161861 Zxing是Google提供的关 ...
- Java生成和解析二维码
前言:曾经有做过不少微信公众号和移动网站的项目,对二维码还算有点了解,刚收到这个任务的时候就想着竟然要用二维码存文本,那就得先考究一下这小小的二维码到底能存多少的东西了. 需求:使用二维码存放文本(x ...
- SpringBoot 整合zxing生成或解析二维码
生成无Logo二维码 . 有Logo二维码 和 解析二维码内容 一.导包 二.Demo 三.结果 一.导包 zxing地址:https://mvnrepository.com/artifact/com ...
最新文章
- 阿里全面进军 IoT 两年后,又放大招!
- js 绑定的键盘事件
- kafka学习笔记:知识点整理
- 关于移动应用APP数据安全的一点见解
- 【数据库】数据库基本概念:数据库管理系统 / 数据库 / 表 / 数据
- Ubuntu下Apache+php+mysql网站架设详解
- 西门子STEP7 MICROWIN V4 SP5 下载
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证....
- 改善程序与设计的55个具体做法 day5
- 中国湖北区域汉至现代行政区划GIS数据
- JavaWeb从入门到精通 二
- SecoClient接收返回码超时
- 网站死链检测的软件-网站死链检测的工具
- python去重保留唯一一个值_python 去重和保留重复值方法 duplicated 和 drop_duplicates...
- CSS压缩之:正则五步替换法
- css选择器(id选择器)
- 直属上司,才是你最该管的人
- Tcl/Tk入门(上)
- arttemplate+ajax 转 vue
- This beta version of Typora is expired,please download and install a newe..解决方案