调用
TwoDimensionCode.encoderQRCode(data, filePath2, "png","第一张");
封装方法
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.exception.DecodingFailedException;
import com.swetake.util.Qrcode;
private final static int QRCODE_WIDTH = 300;
private final static int QRCODE_HEIGHT = 300;
public static void encoderQRCode(String content, String imgPath, String imgType,String text) {
encoderQRCode(content, imgPath, imgType, 2,text);
}
public static void encoderQRCode(String content, String imgPath, String imgType, int size,String text) {
try {
BufferedImage bufImg = qRCodeCommon(content, imgType, size);
bufImg = (BufferedImage)flexible(bufImg, QRCODE_WIDTH, QRCODE_HEIGHT);
bufImg = addNote(bufImg, text);
File imgFile = new File(imgPath);
if (!imgFile.getParentFile().getParentFile().getParentFile().exists()) {
imgFile.getParentFile().getParentFile().getParentFile().mkdirs();
}
if (!imgFile.getParentFile().getParentFile().exists()) {
imgFile.getParentFile().getParentFile().mkdirs();
}
if (!imgFile.getParentFile().exists()) {
imgFile.getParentFile().mkdirs();
}
imgFile.createNewFile();
ImageIO.write(bufImg, imgType, imgFile);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Image flexible(Image image, int width, int height){
Image src = image.getScaledInstance(width, height,Image.SCALE_DEFAULT);
BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
Graphics2D g = tag.createGraphics();
g.drawImage(src, 0, 0, null);
g.dispose();
return tag;
}
public static BufferedImage addNote(BufferedImage image,String note){
Image src = image.getScaledInstance(300, 300,Image.SCALE_DEFAULT);
BufferedImage tag;
if (note.length()<=16){
tag = new BufferedImage(300, 322,BufferedImage.TYPE_INT_RGB);
}else{
tag = new BufferedImage(300, 345,BufferedImage.TYPE_INT_RGB);
}
Graphics g1 = tag.getGraphics();
Graphics2D g2 = tag.createGraphics();
Font font = new Font("微软雅黑",Font.BOLD,18);
g2.setFont(font);
g2.setColor(Color.BLACK);
if (note.length()<=16) {
g1.fillRect(0, QRCODE_HEIGHT, QRCODE_WIDTH, 22);
g2.drawString(note,QRCODE_WIDTH/2-note.length()*8-14, QRCODE_HEIGHT+font.getSize());
}else{
g1.fillRect(0, QRCODE_HEIGHT, QRCODE_WIDTH, 45);
g2.drawString(note.substring(0, 16),5, QRCODE_HEIGHT+font.getSize());
g2.drawString(note.substring(16,note.length()), QRCODE_WIDTH/2-(note.length()-16)*8-14, QRCODE_HEIGHT+font.getSize()*2+4);
}
g1.drawImage(src, 0, 0, null);
g1.dispose();
g2.dispose();
image = tag;
image.flush();
return image;
}
private static BufferedImage qRCodeCommon(String content, String imgType, int size) {
BufferedImage bufImg = null;
size = 10;
try {
Qrcode qrcodeHandler = new Qrcode();
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
qrcodeHandler.setQrcodeVersion(size);
byte[] contentBytes = content.getBytes("utf-8");
int imgSize = 67 + 12 * (size - 1);
bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, imgSize, imgSize);
gs.setColor(Color.BLACK);
int pixoff = 2;
if (contentBytes.length > 0 && contentBytes.length < 800) {
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 * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
} else {
throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
}
gs.dispose();
bufImg.flush();
} catch (Exception e) {
e.printStackTrace();
}
return bufImg;
}
public static String decoderQRCode(String imgPath) throws Exception {
File imageFile = new File(imgPath);
BufferedImage bufImg = null;
String content = null;
try {
bufImg = ImageIO.read(imageFile);
QRCodeDecoder decoder = new QRCodeDecoder();
content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
} catch (IOException e) {
} catch (DecodingFailedException dfe) {
}
return content;
}
public static String decoderQRCode(InputStream input) {
BufferedImage bufImg = null;
String content = null;
try {
bufImg = ImageIO.read(input);
QRCodeDecoder decoder = new QRCodeDecoder();
content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
} catch (DecodingFailedException dfe) {
System.out.println("Error: " + dfe.getMessage());
dfe.printStackTrace();
}
return content;
}
public static void main(String[] args) {
String imgPath = "F:/a.png";
String encoderContent = "http://www.baidu.com";
TwoDimensionCode handler = new TwoDimensionCode();
handler.encoderQRCode(encoderContent, imgPath, "png");
System.out.println("========encoder success");
System.out.println("解析结果如下:");
System.out.println("========decoder success!!!");
}