需要下载小日本提供的SwetakeQRcode.jar
放在lib 目录下,加入到path中去。下面是测试代码。官方提供只能支持120个字节。最后采用google chart api 在线生成二维码
package com.swetakecode;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.MessageFormat;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
public class QRCodeEncoderTest {
public static void createGraphicsCode(String path, String beginDate, String endDate ,String eventName ,String address,String description) throws Exception{
StringBuffer sb;
byte [] d;
if(path != null && path != ""){
d = path.getBytes("UTF-8");
}else {
String result;
sb = new StringBuffer(eventName);
sb.append(beginDate);
sb.append(endDate);
sb.append(address);
sb.append(description);
result = sb.toString();
d = result.getBytes("UTF-8");
}
Qrcode testQrcode;
testQrcode = new Qrcode();
testQrcode.setQrcodeErrorCorrect('M');
testQrcode.setQrcodeEncodeMode('B');
testQrcode.setQrcodeVersion(7);
System.out.println(d.length);
BufferedImage bi = new BufferedImage(98, 98,BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = bi.createGraphics();
g.setBackground(Color.WHITE);
g.clearRect(0, 0, 98, 98);
g.setColor(Color.BLACK);
if (d.length > 0) {
boolean[][] s = testQrcode.calQrcode(d);
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < s.length; j++) {
if (s[j][i]) {
g.fillRect(j * 2 + 3, i * 2 + 3, 2, 2);
}
}
}
}
g.dispose();
bi.flush();
File f;
if(path != null && path != ""){
f = new File("D:\\" + path + ".jpg");
}else {
f = new File("D:\\" + eventName + ".jpg");
}
if (!f.exists()) {
f.createNewFile();
}
// 创建图片
ImageIO.write(bi, "jpg", f);
}
public static void main(String[] args) throws Exception {
String str = "";
String beginDate = MessageFormat.format("{0,date,yyyy-MM-dd hh:mm:ss}" , new Object[] {
new java.sql.Date(System.currentTimeMillis())
});
System.out.println("beginDate"+beginDate);
String endDate = MessageFormat.format("{0,date,yyyy-MM-dd hh:mm:ss}" , new Object[] {
new java.sql.Date(System.currentTimeMillis())
});
System.out.println("endDate"+endDate);
String eventName = "吃饭";
String address = "中国上海";
String description ="上海市静安区延平路谷泰饭店111111111111111111111111111111111";
QRCodeEncoderTest.createGraphicsCode(str,beginDate,endDate,eventName,address,description);
} // end main
}
参考资料:http://hi.baidu.com/gavin_mars/item/04bd5710fa2bdd031994ec6c