本文是我在慕課網學習之后的成果,感謝慕課網的老師。詳細教程可參考 http://www.imooc.com/learn/531
關於二維碼,先簡單的介紹下(摘自百度百科):
在代碼編制上巧妙地利用構成計算機內部邏輯基礎的“0”、“1”比特流的概念,使用若干個與二進制相對應的幾何形體來表示文字數值信息,通過圖象輸入設備或光電掃描設備自動識讀以實現信息自動處理。在許多種類的二維條碼中,常用的碼制有:Data Matrix,MaxiCode, Aztec,QR Code, Vericode,PDF417,Ultracode,Code 49,Code 16K等,QR Code碼是1994年由日本DW公司發明。QR來自英文「Quick Response」的縮寫,即快速反應的意思,源自發明者希望QR碼可讓其內容快速被解碼。QR碼最常見於日本、韓國;並為目前日本最流行的二維空間條碼。但二維碼的安全性也正備受挑戰,帶有惡意軟件和病毒正成為二維碼普及道路上的絆腳石。
接下來我們要做的就是使用QRcodeAPI來完成我們的二維碼生成程序:
1.首先我們要獲取QRcode的Jar包:下載地址: http://www.swetake.com/qrcode/java/qr_java.html (點擊tar.gz文件即可)
然后我們去lib文件下將QRcode.jar導入我們的項目。
2.開始我們的編碼工作。(首先介紹下二維碼是有糾錯能力,其有四個等級:L M Q H,一般使用M等級,注意如果你想生成的二維碼是個網頁鏈接,必須加上 http:/,否則掃碼出來的只是你的url,例如 www.baidu.com 生成的二維碼,掃描出來的結果就是這個url字符串而不會跳轉到百度首頁)
package com.smart.controller;
import com.swetake.util.Qrcode;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
public class Gennerator {
/**
* 使用QRcode生成二維碼
* @param args
*/
public static void main(String[] args) throws Exception{
Qrcode x = new Qrcode();
x.setQrcodeErrorCorrect('M');//設置糾錯等級
x.setQrcodeEncodeMode('B');//設置編碼格式
x.setQrcodeVersion(7);//設置版本(版本有多種,感興趣的可以去研究二維碼的發展歷程,這里我們選擇第七版本)
String qrData = "http://www.baidu.com";
int width = 67 + 12*(7-1);//67+12*(版本號-1)
int height = 67+ 12*(7-1);
int pixoff = 2;//設置偏移量
byte[] d = qrData.getBytes("gb2312");
BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics2D gs =bufferedImage.createGraphics();//使用java的畫圖工具
gs.setBackground(Color.white);
gs.setColor(Color.black);//設置白底黑字
gs.clearRect(0,0,width,height);
if (d.length > 0 && d.length < 120) {
boolean[][] s = x.calQrcode(d);
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < s.length; j++) {
if (s[j][i]) {
gs.fillRect(j * 3+pixoff, i * 3+pixoff, 3, 3);//根據QRcode規則填充黑白點
}
}
}
}
gs.dispose();
bufferedImage.flush();//釋放資源
ImageIO.write(bufferedImage,"png",new File("D:/qrcode.png"));//生成二維碼,格式 png,文件地址
}
}
生成的二維碼如下:
掃一下試試吧!