给QrCodeUtil添加生成Ascii Art字符画格式二维码的功能

This commit is contained in:
TomXin 2022-08-21 03:54:33 +08:00
parent c9f33e5949
commit 7a233005e8
2 changed files with 69 additions and 0 deletions

View File

@ -108,6 +108,38 @@ public class QrCodeUtil {
return toSVG(bitMatrix, qrConfig);
}
/**
* @param content 内容
* @return ASCII Art字符画形式的二维码
* @since 5.8.6
*/
public static String generateAsAsciiArt(String content) {
return generateAsAsciiArt(content, 0,0,1);
}
/**
* @param content 内容
* @param qrConfig 二维码配置仅长边距配置有效
* @return ASCII Art字符画形式的二维码
* @since 5.8.6
*/
public static String generateAsAsciiArt(String content, QrConfig qrConfig) {
BitMatrix bitMatrix = encode(content, qrConfig);
return toAsciiArt(bitMatrix);
}
/**
* @param content 内容
* @param width
* @param height
* @return ASCII Art字符画形式的二维码
* @since 5.8.6
*/
public static String generateAsAsciiArt(String content,int width, int height,int margin) {
QrConfig qrConfig = new QrConfig(width, height).setMargin(margin);
return generateAsAsciiArt( content, qrConfig);
}
/**
* 生成PNG格式的二维码图片以byte[]形式表示
*
@ -495,6 +527,35 @@ public class QrCodeUtil {
"</svg>";
}
/**
* @param bitMatrix
* @return ASCII Art字符画形式的二维码
* @since 5.8.6
*/
public static String toAsciiArt(BitMatrix bitMatrix) {
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
StringBuilder result = new StringBuilder(height * (width + 1));
for (int i = 0; i <= height; i += 2) {
for (int j = 0; j < width; j++) {
boolean tp = bitMatrix.get(i, j);
boolean bt = i + 1 >= height || bitMatrix.get(i + 1, j);
if (tp && bt) {
result.append(' ');//'\u0020'
} else if (tp) {
result.append('▄');//'\u2584'
} else if (bt) {
result.append('▀');//'\u2580'
} else {
result.append('█');//'\u2588'
}
}
result.append('\n');
}
return result.toString();
}
/**
* 创建解码选项
*

View File

@ -118,4 +118,12 @@ public class QrCodeUtilTest {
FileUtil.writeString(svg, "d:/test/qr.svg", StandardCharsets.UTF_8);
}
@Test
public void generateAsciiArtTest() {
QrConfig qrConfig = QrConfig.create();
String asciiArt = QrCodeUtil.generateAsAsciiArt("https://hutool.cn/呱呱呱呱呱呱呱呱呱呱呱呱呱呱呱古古怪怪");
Assert.assertNotNull(asciiArt);
System.out.println(asciiArt);
}
}