java利用qrcode生成带有logo的二维码(logo位置及大小自己调)

时间:2022-11-17 20:36:54

一:下载Qrcode.jar,放到lib文件夹下

java利用qrcode生成带有logo的二维码(logo位置及大小自己调)

二:java代码

package com.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 ErWeiMa {
public Boolean createQRCode(String content, String imgPath, String logoPath) {
try {
Qrcode qrcodeHandler = new Qrcode();
qrcodeHandler.setQrcodeErrorCorrect('M');// 设置二维码排错率,可选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(168, 168, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.white);         // 设置背景色为白色
gs.clearRect(0, 0, 168, 168);
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 * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
} else {
return false;
}
Image img = ImageIO.read(new File(logoPath));  // 实例化一个Image对象。
gs.drawImage(img, 60, 60, 45, 45, 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/yjs/Desktop/logo_QRCode.png";// 最后生成的图片地址
String imgPath1 = "C:/Users/yjs/Desktop/xin.png";// 加入的logo照片
String content = "胡姐姐的博客,永远敞着门!";
ErWeiMa er = new ErWeiMa();
boolean boo = er.createQRCode(content, imgPath, imgPath1);
System.out.println(boo);
}


}

三:运行效果和所需图片


java利用qrcode生成带有logo的二维码(logo位置及大小自己调)     java利用qrcode生成带有logo的二维码(logo位置及大小自己调)

四:借鉴了一篇博客

地址:http://blog.csdn.net/maomao092092/article/details/29572459