1 import java.awt.Color;
2 import java.awt.Graphics2D;
3 import java.awt.Image;
4 import java.awt.image.BufferedImage;
5 import java.io.File;
6
7 import javax.imageio.ImageIO;
8
9 import com.swetake.util.Qrcode;
10
11
12
13 /**
14 * @author GH
15 *
16 */
17 public class BarcodeFactory {
18
19
20 public static int createQRCode(String content, String imgPath,String ccbPath,int version) {
21 try {
22 Qrcode qrcodeHandler = new Qrcode();
23 //设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
24 qrcodeHandler.setQrcodeErrorCorrect('M');
25 //N代表数字,A代表字符a-Z,B代表其他字符
26 qrcodeHandler.setQrcodeEncodeMode('B');
27 // 设置设置二维码版本,取值范围1-40,值越大尺寸越大,可存储的信息越大
28 qrcodeHandler.setQrcodeVersion(version);
29 // 图片尺寸
30 int imgSize =67 + 12 * (version - 1) ;
31
32 byte[] contentBytes = content.getBytes("gb2312");
33 BufferedImage image = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
34 Graphics2D gs = image.createGraphics();
35
36 gs.setBackground(Color.WHITE);
37 gs.clearRect(0, 0, imgSize, imgSize);
38
39 // 设定图像颜色 > BLACK
40 gs.setColor(Color.BLUE);
41
42 // 设置偏移量 不设置可能导致解析出错
43 int pixoff = 2;
44 // 输出内容 > 二维码
45 if (contentBytes.length > 0 && contentBytes.length < 130) {
46 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
47 for (int i = 0; i < codeOut.length; i++) {
48 for (int j = 0; j < codeOut.length; j++) {
49 if (codeOut[j][i]) {
50 gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
51 }
52 }
53 }
54 } else {
55 System.err.println("QRCode content bytes length = "
56 + contentBytes.length + " not in [ 0,125]. ");
57 return -1;
58 }
59 Image logo = ImageIO.read(new File(ccbPath));//实例化一个Image对象。
60 int widthLogo = logo.getWidth(null)>image.getWidth()*2/10?(image.getWidth()*2/10):logo.getWidth(null),
61 heightLogo = logo.getHeight(null)>image.getHeight()*2/10?(image.getHeight()*2/10):logo.getWidth(null);
62
63 /**
64 * logo放在中心
65 */
66 int x = (image.getWidth() - widthLogo) / 2;
67 int y = (image.getHeight() - heightLogo) / 2;
68 gs.drawImage(logo, x, y, widthLogo, heightLogo, null);
69 gs.dispose();
70 image.flush();
71
72 // 生成二维码QRCode图片
73 File imgFile = new File(imgPath);
74 ImageIO.write(image, "png", imgFile);
75
76 } catch (Exception e)
77 {
78 e.printStackTrace();
79 return -100;
80 }
81
82 return 0;
83 }
84 public static void main(String[] args) {
85 String imgPath = "D:/二维码生成/logo_QRCode.png";
86 String logoPath = "D:/logo/logo1.jpg";
87 String encoderContent = "https://blog.csdn.net/gao36951/article/details/41149049";
88 BarcodeFactory.createQRCode(encoderContent, imgPath, logoPath,8);
89 }
90 }

欢迎大家一起说出自己的想法。