发布日期:2025-05-04 02:06浏览次数:
今儿个,咱来聊聊怎么用Java整出个带logo的二维码。这玩意儿现在到处都是,扫一扫就能进个网站、加个好友啥的,挺方便。前两天我不是接个小活儿嘛客户就想要个带自家logo的二维码,我就琢磨着把这过程记下来,以后再碰上类似的事儿,也好有个参考。
要说这Java生成二维码,也不是啥难事,但咱也不能空手上阵,得先准备好工具。我这回用的是谷歌的ZXing库,听说这玩意儿挺好使,功能也全。你也可以用别的库,看个人喜
咱得把ZXing库给弄进来。我用的是Maven来管理项目,所以在*文件里加这么几行:
<dependency>
<groupId>*</groupId>
<artifactId>core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>*</groupId>
<artifactId>javase</artifactId>
<version>3.5.1</version>
</dependency>
版本号这里我用3.5.1版本,你们到时候用最新的就行,问题不大。
然后我这边还用个叫做Hutool的工具类来着,不是必要的,但是为方便我操作文件啥的。
<dependency>
<groupId>*</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.20</version>
</dependency>
把这几行往*里一粘,Maven就会自动把需要的jar包下载下来,省事儿不少。要是你不用Maven,那就得手动下载jar包,然后添加到项目里,稍微麻烦点。
家伙事儿准备好,咱就开干!先创建一个Java类,名字就叫QRCodeUtil
,听着就专业。然后,咱在里面写个方法,用来生成二维码:
package *;
import *.BarcodeFormat;
import *.EncodeHintType;
import *.MultiFormatWriter;
import *.*;
import *.*;
import *;
import *.;
import *.BufferedImage;
import *;
import *;
import *;
import *;
public class QRCodeUtil {
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
public static void createQRCode(String content, String logoPath, String destPath, int width, int height) throws Exception {
// 设置二维码参数
Map<EncodeHintType, Object> hints = new HashMap<>();
*(*_CORRECTION, ErrorCorrectionLevel.H); // 纠错等级,H最高
*(*_SET, "UTF-8"); // 字符编码
*(*, 1); // 边距
// 生成二维码矩阵
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, *_CODE, width, height, hints);
// 创建图片
BufferedImage image = toBufferedImage(bitMatrix);
// 添加logo
if (logoPath != null && !*()) {
addLogo(image, logoPath);
// 保存图片
File file = new File(destPath);
*(image, "png", file);
private static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = *();
int height = *();
BufferedImage image = new BufferedImage(width, height, *_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
*(x, y, *(x, y) ? BLACK : WHITE);
return image;
private static void addLogo(BufferedImage image, String logoPath) throws IOException {
// 读取logo图片
File logoFile = new File(logoPath);
Image logoImage = *(logoFile);
// 计算logo位置
int logoWidth = *(null);
int logoHeight = *(null);
int imageWidth = *();
int imageHeight = *();
int x = (imageWidth - logoWidth) / 2;
int y = (imageHeight - logoHeight) / 2;
// 绘制logo
Graphics2D graphics = *();
*(logoImage, x, y, null);
public static void main(String[] args) throws Exception {
createQRCode("*", "D:/*", "D:/*", 300, 300);
代码写起来很快,因为逻辑很简单,就是调用几个方法。代码里我也写注释,你们简单看一下。
这代码看着有点长,大部分都是固定的格式,咱主要关注几个地方:
content
:这是二维码的内容,你想放啥都行,网址、文本、电话号码啥的。logoPath
:这是logo图片的路径,可以是本地路径,也可以是网络路径。destPath
:这是生成的二维码图片的保存路径。width
和height
:这是二维码图片的宽度和高度,单位是像素。我这里测试就随便放个百度的连接,然后logo图片我放到D盘,二维码生成后也放到D盘
代码写完,咱就运行一下,看看效果。我是在main方法里调用的createQRCode
方法,运行之后,D盘就多一个*的图片,打开一看,果然是个带logo的二维码!用手机扫一扫,也能正常跳转到百度首页,大功告成!
用Java生成带logo的二维码并不难,关键是要找对工具,理清思路。我这回用的ZXing库就挺好使,几行代码就搞定。这只是个简单的例子,还有很多可以优化的地方,比如可以把二维码参数放到配置文件里,可以自定义logo的大小和位置等等。不过这些都是后话,咱先把最基本的功能实现再说。
今儿个就分享到这儿,希望对大家有所帮助。要是大家有啥问题,或者有更好的方法,欢迎留言交流!