java 生成二维码后叠加LOGO并转换成base64

时间:2023-03-08 16:51:19
java 生成二维码后叠加LOGO并转换成base64

1.代码

  见文末推荐

2.测试

  测试1:生成base64码

public static void main(String[] args) throws Exception {
String data = "http://www.cnblogs.com/Marydon20170307";
File logoFile = new File(QRcodeUtils.class.getResource("ewm.jpg").getPath());
BufferedImage image = QRcodeUtils.createQRCodeWithLogo(data, logoFile);
String base64 = QRcodeUtils.writeToString(image);
System.out.println(base64);
}

  页面调用:

<img src="data:image/png;base64,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
PzS0PEBfvLClAAAAAElFTkSuQmCC" />

  效果展示:

java 生成二维码后叠加LOGO并转换成base64

  说明:源代码生成的图片格式已经改成了JPG,这里测试的是PNG,自己记得修改!

2018/11/29

  测试2:生成图片

public static void main(String[] args) {
String data = "Marydon";
// 不带logo
BufferedImage image = createQRCode(data);
String fileName = "博客园";
File qrcodeFile = new File("d:/" + fileName + ".png");
ZxingQrcode.writeToFile(image, qrcodeFile); // 带logo
File logoFile = new File("D:\\ewm.jpg");
image = createQRCodeWithLogo(data, logoFile);
fileName = "博客园2";
qrcodeFile = new File("d:/" + fileName + ".png");
ZxingQrcode.writeToFile(image, qrcodeFile); }

  说明:生成的二维码图片如果它的上级目录不存在,会创建失败!

qrcodeFile = new File("d:/测试/" + fileName + ".png");
// 文件夹不存在,自动创建文件夹
if (!qrcodeFile.exists()) {
qrcodeFile.mkdirs();
}