[QRBTF](https://qrbtf.com/) 是一个参数化的二维码生成网站,强烈建议体验网站提供的各种样式!
通过阅读作者们的优秀的设计思想之后,我决定写一个 Java 工具包,方便 Java 开发者使用。
出版代码已经提交至 GitHub 上,点击访问 [qrbtf-java](https://github.com/bufflu/qrbtf-java)
## 如何使用
maven 依赖
```xml
<dependencies>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
</dependencies>
```
与网站 [qrbtf.com](https://qrbtf.com/) 中的操作步骤相同:
- 提供文本(如果是网址别忘了 http://)
- 选择样式
- 调整参数
- 获取二维码图片
```java
// 文本
String content = "https://qrbtf.com";
// 选择样式(渲染器)并调整参数
Renderer renderer = Renderer.rect()
.adjust()
.errorCorrectionLevel(ErrorCorrectionLevel.L)
.anchorPointShape(Shape.RECTANGLE)
.anchorPointColor(Color.BLUE)
.anchorPointShape(Shape.ROUNDED_RECTANGLE)
.dataPointScale(0)
.end();
// 生成图片
BufferedImage image = new QRBtf(renderer).encode(content, null);
// 输出(这里可以选择不同的方式输出)
ImageIO.write(image, "png", new File("/Users/bufflu/Desktop/" + System.currentTimeMillis() + ".png"));
```
## 样式与参数
在 qrbtf-java 中通过 `Renderer.xx()` 选择样式,例如:
```java
// A1 样式
RendererRect rendererRect = Renderer.rect();
// A — a1 样式
RendererLine rendererLine = Renderer.line();
```
[qrbtf.com](https://qrbtf.com/) 中的样式与 Renderer 的对应关系 [参见](https://www.yuque.com/qrbtf/docs/api)
| 样式名 | 方法名 |完成|
| :--: | :--: |:--: |
| **A1** | rect | ✔️|
| **A2** | round | ✔️|
| **A3** | round3 | ✔️|
| **A — a1** | line | ✔️|
| **A — a2** | line2 | ✔️|
| **A — b1** | funcA | ✔️|
| **A — b2** | funcB | ✔️|
| **SP — 1** | dsj | |
| **SP — 2** | randRect | |
| **SP — 3** | circle | |
| **B1** | d25 | |
| **C1** | image | ✔️|
| **C2** | resImage | ✔️|
| **C3** | fillImage | ✔️|
每种样式可调整的参数不同,通过 `rendererXxx.adjust()` 来调整,最后以 `end()` 结束,例如:
```java
// 调整容错率与定位点的颜色
Renderer renderer = Renderer.rect()
.adjust()
.errorCorrectionLevel(ErrorCorrectionLevel.L)
.anchorPointColor(Color.BLUE)
.end();
```
## 期待
- 完成所有样式的实现
- 支持 svg 格式
- 使生成的图片更美观
- 性能优化
(2022-08-03) 待补充

如何用 Java 制作一个漂亮的二维码