QRGen+thumbnailator生成包含logo 的 二维码
原理很简单:QRGen 生成二维码,同时结合thumbnailator的 水印模式将图片放中心,这样一个支持logo 的二维码就可以了
参考代码
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dalong</groupId>
<artifactId>imageapp</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.kenglxn.qrgen</groupId>
<artifactId>javase</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
</dependencies>
</project>
- 核心代码
package com.dalong;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.glxn.qrgen.core.image.ImageType;
import net.glxn.qrgen.javase.QRCode;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
public class Application {
public static void main(String[] args) throws IOException {
File file = QRCode.from("https://www.cnblogs.com/rongfengliang/p/13822698.html").withColor(0x171616, 0xFFFFFFAA).to(ImageType.PNG).withSize(350, 350).file();
Thumbnails.of(file)
.size(350, 350)
.watermark(Positions.CENTER, ImageIO.read(new File("src/main/resources/yyy_meitu_2.png")), 0.7f)
.toFile(new File("appdemo.jpg"));
}
}
- 效果
- web 集成说明
很简单,主要是转为base64编码,方便传输
package com.dalong;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.glxn.qrgen.core.image.ImageType;
import net.glxn.qrgen.javase.QRCode;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.io.*;
public class Application {
public static void main(String[] args) throws IOException {
ByteOutputStream outputStream = new ByteOutputStream();
File file = QRCode.from("https://www.cnblogs.com/rongfengliang/p/13822698.html").withColor(0x171616, 0xFFFFFFAA).to(ImageType.PNG).withSize(350, 350).file();
Thumbnails.of(file)
.size(350, 350)
.watermark(Positions.CENTER, ImageIO.read(new File("src/main/resources/yyy_meitu_2.png")), 1f)
.toOutputStream(outputStream);
String qrCodeBase64 = new BASE64Encoder().encode(outputStream.getBytes());
System.out.println(qrCodeBase64);
}
}
说明
以上生成的二维码还是偏简单的,实际需要自己调整下 ,同时注意实际我们需要进行下颜色搭配,包含了logo的颜色以及二维码的背景以及前景
颜色
参考资料
https://github.com/kenglxn/QRGen
https://github.com/coobird/thumbnailator
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-10-15 ent 基本使用十九 事务处理
2019-10-15 ent 基本使用十四 edge
2019-10-15 ent 基本使用十八 查询谓词
2019-10-15 ent 基本使用十七 分页与排序
2019-10-15 ent 基本使用十六 聚合
2019-10-15 ent 基本使用十五 一个图遍历的例子
2019-10-15 ent 基本使用十三 debug 模式