java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
本篇文章主要介绍了 java 实现二维码生成的几个方法(推荐), 具有一定的参考价值, 有兴趣的可以了解一下
java 实现二维码生成的几个方法, 具体如下:
1: 使用 SwetakeQRCode 在 Java 项目中生成二维码
http://swetake.com/qr/ 下载地址
或着 http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip
这个是日本人写的, 生成的是我们常见的方形的二维码
可以用中文
如: 5677777ghjjjjj
2: 使用 BarCode4j 生成条形码和二维码
BarCode4j 网址: http://sourceforge.NET/projects/barcode4j/
barcode4j 是使用 datamatrix 的二维码生成算法, 为支持 qr 的算法
datamatrix 是欧美的标准, qr 为日本的标准,
barcode4j 一般生成出来是长方形的
如: 88777alec000yan
3:zxing
zxing 这个是 google 的
下载地址 :http://code.google.com/p/zxing/downloads/list
Java 代码:
- import java.io.File;
- import java.util.Hashtable;
- import com.google.zxing.BarcodeFormat;
- import com.google.zxing.EncodeHintType;
- import com.google.zxing.MultiFormatWriter;
- import com.google.zxing.client.j2se.MatrixToImageWriter;
- import com.google.zxing.common.BitMatrix;
- import com.google.zxing.qrcode.QRCodeWriter;
- public class QRCodeEvents {
- public static void main(String[] args) throws Exception {
- String text = "你好";
- int width = 100;
- int height = 100;
- String format = "png";
- Hashtable hints = new Hashtable();
- hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
- BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
- File outputFile = new File("new.png");
- MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
- }
- }
4:google chart api 就有实现二维码的方法
利用这个 api, 使用 google appengine 进行实现
5:JS 生成二维码
使用 jQuery-qrcode 生成二维码
先简单说一下 jquery-qrcode, 这个开源的三方库(可以从 https://github.com/jeromeetienne/jquery-qrcode 获取),
qrcode.js 是实现二维码数据计算的核心类,
jquery.qrcode.js 是把它用 jquery 方式封装起来的, 用它来实现图形渲染, 其实就是画图(支持 canvas 和 table 两种方式)
支持的功能主要有:
Js 代码:
text : "https://github.com/jeromeetienne/jquery-qrcode" // 设置二维码内容
Js 代码:
- render : "canvas",// 设置渲染方式
- width : 256, // 设置宽度
- height : 256, // 设置高度
- typeNumber : -1, // 计算模式
- correctLevel : QRErrorCorrectLevel.H,// 纠错等级
- background : "#ffffff",// 背景颜色
- foreground : "#000000" // 前景颜色
使用方式非常简单
Js 代码:
jQuery('#output').qrcode({width:200,height:200,correctLevel:0,text:content});
经过简单实践,
使用 canvas 方式渲染性能还是非常不错的, 但是如果用 table 方式, 性能不太理想, 特别是 IE9 以下的浏览器, 所以需要自行优化一下渲染 table 的方式, 这里就不细述了
其实上面的 js 有一个小小的缺点, 就是默认不支持中文
这跟 js 的机制有关系, jquery-qrcode 这个库是采用 charCodeAt() 这个方式进行编码转换的,
而这个方法默认会获取它的 Unicode 编码, 一般的解码器都是采用 UTF-8, ISO-8859-1 等方式,
英文是没有问题, 如果是中文, 一般情况下 Unicode 是 UTF-16 实现, 长度 2 位, 而 UTF-8 编码是 3 位, 这样二维码的编解码就不匹配了
解决方式当然是, 在二维码编码前把字符串转换成 UTF-8, 具体代码如下:
- function utf16to8(str) {
- var out, i, len, c;
- out = "";
- len = str.length;
- for (i = 0; i < len; i++) {
- c = str.charCodeAt(i);
- if ((c >= 0x0001) && (c <= 0x007F)) {
- out += str.charAt(i);
- } else if (c > 0x07FF) {
- out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
- out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
- } else {
- out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
- out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
- }
- }
- return out;
- }
来源: http://www.phperz.com/article/18/0215/359162.html