mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-20 06:59:35 +08:00
优化QrCodeUtil生成base64方法,支持svg、txt
This commit is contained in:
parent
ea06be85e9
commit
87319eb73f
@ -11,6 +11,7 @@ import cn.hutool.core.lang.ansi.AnsiEncoder;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.URLUtil;
|
||||
import com.google.zxing.*;
|
||||
import com.google.zxing.common.BitMatrix;
|
||||
import com.google.zxing.common.GlobalHistogramBinarizer;
|
||||
@ -46,12 +47,12 @@ public class QrCodeUtil {
|
||||
*
|
||||
* @param content 内容
|
||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
||||
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||
* @param logoBase64 logo 图片的 base64 编码
|
||||
* @return 图片 Base64 编码字符串
|
||||
*/
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String imageType, String logoBase64) {
|
||||
return generateAsBase64(content, qrConfig, imageType, Base64.decode(logoBase64));
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String targetType, String logoBase64) {
|
||||
return generateAsBase64(content, qrConfig, targetType, Base64.decode(logoBase64));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -59,12 +60,12 @@ public class QrCodeUtil {
|
||||
*
|
||||
* @param content 内容
|
||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
||||
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||
* @param logo logo 图片的byte[]
|
||||
* @return 图片 Base64 编码字符串
|
||||
*/
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String imageType, byte[] logo) {
|
||||
return generateAsBase64(content, qrConfig, imageType, ImgUtil.toImage(logo));
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String targetType, byte[] logo) {
|
||||
return generateAsBase64(content, qrConfig, targetType, ImgUtil.toImage(logo));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,13 +73,13 @@ public class QrCodeUtil {
|
||||
*
|
||||
* @param content 内容
|
||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
||||
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||
* @param logo logo 图片的byte[]
|
||||
* @return 图片 Base64 编码字符串
|
||||
*/
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String imageType, Image logo) {
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String targetType, Image logo) {
|
||||
qrConfig.setImg(logo);
|
||||
return generateAsBase64(content, qrConfig, imageType);
|
||||
return generateAsBase64(content, qrConfig, targetType);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -90,12 +91,36 @@ public class QrCodeUtil {
|
||||
*
|
||||
* @param content 内容
|
||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
||||
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||
* @return 图片 Base64 编码字符串
|
||||
*/
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String imageType) {
|
||||
final BufferedImage img = generate(content, qrConfig);
|
||||
return ImgUtil.toBase64DataUri(img, imageType);
|
||||
public static String generateAsBase64(String content, QrConfig qrConfig, String targetType) {
|
||||
String result;
|
||||
switch (targetType) {
|
||||
case QR_TYPE_SVG:
|
||||
String svg = generateAsSvg(content, qrConfig);
|
||||
result = svgToBase64(svg);
|
||||
break;
|
||||
case QR_TYPE_TXT:
|
||||
String txt = generateAsAsciiArt(content, qrConfig);
|
||||
result = txtToBase64(txt);
|
||||
break;
|
||||
default:
|
||||
final BufferedImage img = generate(content, qrConfig);
|
||||
result = ImgUtil.toBase64DataUri(img, targetType);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static String txtToBase64(String txt) {
|
||||
return URLUtil.getDataUri("text/plain", "base64", Base64.encode(txt));
|
||||
}
|
||||
|
||||
private static String svgToBase64(String svg) {
|
||||
return URLUtil.getDataUri("image/svg+xml", "base64", Base64.encode(svg));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -41,7 +41,7 @@ public class QrCodeUtilTest {
|
||||
// 背景色透明
|
||||
config.setBackColor(null);
|
||||
config.setErrorCorrection(ErrorCorrectionLevel.H);
|
||||
String path = FileUtil.isWindows() ? "d:/test/qrcodeCustom.txt" : "~/Desktop/hutool/qrcodeCustom.svg";
|
||||
String path = FileUtil.isWindows() ? "d:/test/qrcodeCustom.png" : "~/Desktop/hutool/qrcodeCustom.png";
|
||||
QrCodeUtil.generate("https://hutool.cn/", config, FileUtil.touch(path));
|
||||
}
|
||||
|
||||
@ -87,6 +87,13 @@ public class QrCodeUtilTest {
|
||||
Assert.assertNotNull(base641);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void generateAsBase64Test3() {
|
||||
String base64 = QrCodeUtil.generateAsBase64("https://hutool.cn/", new QrConfig(400, 400), "svg");
|
||||
Assert.assertNotNull(base64);
|
||||
System.out.println(base64);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void decodeTest3() {
|
||||
|
Loading…
Reference in New Issue
Block a user