java利用zxing来生成和解析二维码,支持中文
来源:互联网 发布:数据分析师难考吗 编辑:程序博客网 时间:2024/05/20 03:05
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来生成和解析二维码,支持中文
- Java利用zxing生成/解析二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- Java利用Zxing生成二维码
- java利用zxing生成二维码
- Java利用Zxing生成二维码
- 通过proc fs获取设备状态
- record dump-flow
- VS2012下开发驱动-配置环境
- Java调用C语言Dll库回调函数
- 《快学Scala》第7章 包和引入 练习
- java利用zxing来生成和解析二维码,支持中文
- application、session和request的计数器
- 砝码称重与大小交换问题
- 安卓手机系统最下面4个图标误删了怎么恢复
- C++ enum
- WebView注入Java对象注意事项
- Python的help()中,"->"符号和"<==>"符号的含义
- Smarty 显示大括号 | 在Smarty中计算数组元素的长度 | Smarty字符串拼接
- MIT《线性代数》第一课 线性方程组的几何解释