mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-20 15:09: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.CharsetUtil;
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.core.util.URLUtil;
|
||||||
import com.google.zxing.*;
|
import com.google.zxing.*;
|
||||||
import com.google.zxing.common.BitMatrix;
|
import com.google.zxing.common.BitMatrix;
|
||||||
import com.google.zxing.common.GlobalHistogramBinarizer;
|
import com.google.zxing.common.GlobalHistogramBinarizer;
|
||||||
@ -46,12 +47,12 @@ public class QrCodeUtil {
|
|||||||
*
|
*
|
||||||
* @param content 内容
|
* @param content 内容
|
||||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||||
* @param logoBase64 logo 图片的 base64 编码
|
* @param logoBase64 logo 图片的 base64 编码
|
||||||
* @return 图片 Base64 编码字符串
|
* @return 图片 Base64 编码字符串
|
||||||
*/
|
*/
|
||||||
public static String generateAsBase64(String content, QrConfig qrConfig, String imageType, String logoBase64) {
|
public static String generateAsBase64(String content, QrConfig qrConfig, String targetType, String logoBase64) {
|
||||||
return generateAsBase64(content, qrConfig, imageType, Base64.decode(logoBase64));
|
return generateAsBase64(content, qrConfig, targetType, Base64.decode(logoBase64));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,12 +60,12 @@ public class QrCodeUtil {
|
|||||||
*
|
*
|
||||||
* @param content 内容
|
* @param content 内容
|
||||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||||
* @param logo logo 图片的byte[]
|
* @param logo logo 图片的byte[]
|
||||||
* @return 图片 Base64 编码字符串
|
* @return 图片 Base64 编码字符串
|
||||||
*/
|
*/
|
||||||
public static String generateAsBase64(String content, QrConfig qrConfig, String imageType, byte[] logo) {
|
public static String generateAsBase64(String content, QrConfig qrConfig, String targetType, byte[] logo) {
|
||||||
return generateAsBase64(content, qrConfig, imageType, ImgUtil.toImage(logo));
|
return generateAsBase64(content, qrConfig, targetType, ImgUtil.toImage(logo));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,13 +73,13 @@ public class QrCodeUtil {
|
|||||||
*
|
*
|
||||||
* @param content 内容
|
* @param content 内容
|
||||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||||
* @param logo logo 图片的byte[]
|
* @param logo logo 图片的byte[]
|
||||||
* @return 图片 Base64 编码字符串
|
* @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);
|
qrConfig.setImg(logo);
|
||||||
return generateAsBase64(content, qrConfig, imageType);
|
return generateAsBase64(content, qrConfig, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,12 +91,36 @@ public class QrCodeUtil {
|
|||||||
*
|
*
|
||||||
* @param content 内容
|
* @param content 内容
|
||||||
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
* @param qrConfig 二维码配置,包括长、宽、边距、颜色等
|
||||||
* @param imageType 图片类型(图片扩展名),见{@link ImgUtil}
|
* @param targetType 类型(图片扩展名),见{@link #QR_TYPE_SVG}、 {@link #QR_TYPE_TXT}、{@link ImgUtil}
|
||||||
* @return 图片 Base64 编码字符串
|
* @return 图片 Base64 编码字符串
|
||||||
*/
|
*/
|
||||||
public static String generateAsBase64(String content, QrConfig qrConfig, String imageType) {
|
public static String generateAsBase64(String content, QrConfig qrConfig, String targetType) {
|
||||||
final BufferedImage img = generate(content, qrConfig);
|
String result;
|
||||||
return ImgUtil.toBase64DataUri(img, imageType);
|
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.setBackColor(null);
|
||||||
config.setErrorCorrection(ErrorCorrectionLevel.H);
|
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));
|
QrCodeUtil.generate("https://hutool.cn/", config, FileUtil.touch(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,6 +87,13 @@ public class QrCodeUtilTest {
|
|||||||
Assert.assertNotNull(base641);
|
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
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void decodeTest3() {
|
public void decodeTest3() {
|
||||||
|
Loading…
Reference in New Issue
Block a user