增加QrXXX

This commit is contained in:
Looly
2022-09-15 19:12:50 +08:00
parent eba3332eaf
commit 37e971c4bc
10 changed files with 514 additions and 220 deletions

View File

@@ -2,7 +2,9 @@ package cn.hutool.extra.qrcode;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.text.StrUtil;
import cn.hutool.swing.img.ImgUtil;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.datamatrix.encoder.SymbolShapeHint;
@@ -14,6 +16,7 @@ import org.junit.Test;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.charset.StandardCharsets;
/**
* 二维码工具类单元测试
@@ -31,7 +34,7 @@ public class QrCodeUtilTest {
@Test
@Ignore
public void generateCustomTest() {
final QrConfig config = new QrConfig();
final QrConfig config = QrConfig.of();
config.setMargin(0);
config.setForeColor(Color.CYAN);
// 背景色透明
@@ -44,7 +47,7 @@ public class QrCodeUtilTest {
@Test
@Ignore
public void generateWithLogoTest() {
final String icon = FileUtil.isWindows() ? "d:/test/pic/face.jpg" : "~/Desktop/hutool/pic/face.jpg";
final String icon = FileUtil.isWindows() ? "d:/test/pic/logo.jpg" : "~/Desktop/hutool/pic/logo.jpg";
final String targetPath = FileUtil.isWindows() ? "d:/test/qrcodeWithLogo.jpg" : "~/Desktop/hutool/qrcodeWithLogo.jpg";
QrCodeUtil.generate(//
"https://hutool.cn/", //
@@ -68,17 +71,22 @@ public class QrCodeUtilTest {
}
@Test
public void generateAsBase64Test() {
final String base64 = QrCodeUtil.generateAsBase64("https://hutool.cn/", new QrConfig(400, 400), "png");
public void generateAsBase64AndDecodeTest() {
final String url = "https://hutool.cn/";
String base64 = QrCodeUtil.generateAsBase64DataUri(url, new QrConfig(400, 400), "png");
Assert.assertNotNull(base64);
base64 = StrUtil.removePrefix(base64, "data:image/png;base64,");
final String decode = QrCodeUtil.decode(IoUtil.toStream(Base64.decode(base64)));
Assert.assertEquals(url, decode);
}
@Test
@Ignore
public void generateAsBase64Test2() {
final byte[] bytes = FileUtil.readBytes(new File("d:/test/qr.png"));
final String encode = Base64.encode(bytes);
final String base641 = QrCodeUtil.generateAsBase64("https://hutool.cn/", new QrConfig(400, 400), "png", encode);
final String base641 = QrCodeUtil.generateAsBase64DataUri("https://hutool.cn/",
new QrConfig(400, 400), "png", bytes);
Assert.assertNotNull(base641);
}
@@ -91,7 +99,7 @@ public class QrCodeUtilTest {
@Test
public void pdf417Test() {
final BufferedImage image = QrCodeUtil.generate("content111", BarcodeFormat.PDF_417, QrConfig.of());
final BufferedImage image = QrCodeUtil.generate("content111", QrConfig.of().setFormat(BarcodeFormat.PDF_417));
Assert.assertNotNull(image);
}
@@ -99,11 +107,50 @@ public class QrCodeUtilTest {
public void generateDataMatrixTest() {
final QrConfig qrConfig = QrConfig.of();
qrConfig.setShapeHint(SymbolShapeHint.FORCE_RECTANGLE);
final BufferedImage image = QrCodeUtil.generate("content111", BarcodeFormat.DATA_MATRIX, qrConfig);
final BufferedImage image = QrCodeUtil.generate("content111", qrConfig.setFormat(BarcodeFormat.DATA_MATRIX));
Assert.assertNotNull(image);
final QrConfig config = QrConfig.of();
config.setShapeHint(SymbolShapeHint.FORCE_SQUARE);
final BufferedImage imageSquare = QrCodeUtil.generate("content111", BarcodeFormat.DATA_MATRIX, qrConfig);
final BufferedImage imageSquare = QrCodeUtil.generate("content111", qrConfig.setFormat(BarcodeFormat.DATA_MATRIX));
Assert.assertNotNull(imageSquare);
}
@Test
@Ignore
public void generateSvgTest() {
final QrConfig qrConfig = QrConfig.of()
.setImg("d:/test/pic/logo.jpg")
.setForeColor(Color.blue)
.setBackColor(Color.pink)
.setRatio(8)
.setErrorCorrection(ErrorCorrectionLevel.M)
.setMargin(1);
final String svg = QrCodeUtil.generateAsSvg("https://hutool.cn/", qrConfig);
Assert.assertNotNull(svg);
FileUtil.writeString(svg, FileUtil.touch("d:/test/hutool_qr.svg"), StandardCharsets.UTF_8);
}
@Test
public void generateAsciiArtTest() {
final QrConfig qrConfig = QrConfig.of()
.setForeColor(Color.BLUE)
.setBackColor(Color.MAGENTA)
.setWidth(0)
.setHeight(0).setMargin(1);
final String asciiArt = QrCodeUtil.generateAsAsciiArt("https://hutool.cn/",qrConfig);
Assert.assertNotNull(asciiArt);
//Console.log(asciiArt);
}
@Test
public void generateAsciiArtNoCustomColorTest() {
final QrConfig qrConfig = QrConfig.of()
.setForeColor(null)
.setBackColor(null)
.setWidth(0)
.setHeight(0).setMargin(1);
final String asciiArt = QrCodeUtil.generateAsAsciiArt("https://hutool.cn/",qrConfig);
Assert.assertNotNull(asciiArt);
//Console.log(asciiArt);
}
}