From 7a233005e8738349671d750fe5d7ac4e531ae281 Mon Sep 17 00:00:00 2001 From: TomXin <766781886@qq.com> Date: Sun, 21 Aug 2022 03:54:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99QrCodeUtil=E6=B7=BB=E5=8A=A0=E7=94=9F?= =?UTF-8?q?=E6=88=90Ascii=20Art=E5=AD=97=E7=AC=A6=E7=94=BB=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E4=BA=8C=E7=BB=B4=E7=A0=81=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/extra/qrcode/QrCodeUtil.java | 61 +++++++++++++++++++ .../hutool/extra/qrcode/QrCodeUtilTest.java | 8 +++ 2 files changed, 69 insertions(+) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java index c5a0f5780..53da5235f 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java @@ -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 { ""; } + /** + * @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(); + } + /** * 创建解码选项 * diff --git a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java index 04ab35dcf..9a13e58eb 100755 --- a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java @@ -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); + } + }