package com.gipson.ocs.test;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
public class QRCode {
public Boolean createQRCode(String content, String imgPath, String logoPath) {
try {
Qrcode qrcodeHandler = new Qrcode();
qrcodeHandler.setQrcodeErrorCorrect('H');// 設置二維碼排錯率,可選L(7%)、M(15%)、Q(25%)、H(30%),排錯率越高可存儲的信息越少,但對二維碼清晰度的要求越小
qrcodeHandler.setQrcodeEncodeMode('B');// N代表數字,A代表字符a-Z,B代表其他字符
qrcodeHandler.setQrcodeVersion(9);// 設置設置二維碼版本,取值範圍1-40,值越大尺寸越大,可存儲的信息越大
byte[] contentBytes = content.getBytes("utf-8");// 設置編碼格式爲UTF-8
BufferedImage bufImg = new BufferedImage(110, 110,
BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.white); // 設置背景色爲白色
gs.clearRect(0, 0, 110, 110);
gs.setColor(Color.BLACK); // 設定圖像顏色 爲黑色
int pixoff = 2; // 設置偏移量 不設置可能導致解析出錯
// 輸出內容 > 二維碼
if (contentBytes.length > 0 && contentBytes.length < 150) {
boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if (codeOut[j][i]) {
gs.fillRect(j * 2 + pixoff, i * 2 + pixoff, 2, 2);
}
}
}
} else {
return false;
}
Image img = ImageIO.read(new File(logoPath)); // 實例化一個Image對象。
gs.drawImage(img, 40, 40, 30, 30, null); // 60,60是距離gs兩個邊的距離,45,45是中間logo的大小
gs.dispose();
bufImg.flush();
File imgFile = new File(imgPath);
ImageIO.write(bufImg, "png", imgFile);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public static void main(String[] args) {
String imgPath = "C:/Users/xsyuan/Desktop/photo/xsyxin3.jpg";// 最後生成的圖片地址
String imgPath1 = "C:/Users/xsyuan/Desktop/photo/xsy2.jpg";// 加入的logo照片
String content = "Dept:IT\nName:xsy\nPhone:17666668888";
QRCode er = new QRCode();
boolean boo = er.createQRCode(content, imgPath, imgPath1);
System.out.println(boo);
}
}