From 5d5480af459dce65246451f92dd2c523f092e619 Mon Sep 17 00:00:00 2001 From: wb-zj268791 Date: Tue, 19 May 2020 14:42:02 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20QRCode=20=20base64=20?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=BD=A2=E5=BC=8F=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/extra/qrcode/QrCodeUtil.java | 60 ++++++++++++++++++- .../hutool/extra/qrcode/QrCodeUtilTest.java | 16 +++++ 2 files changed, 74 insertions(+), 2 deletions(-) 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 73c5927fa..df6c28fff 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java @@ -19,12 +19,18 @@ import com.google.zxing.common.HybridBinarizer; import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.text.MessageFormat; +import java.util.Base64; import java.util.HashMap; +import javax.imageio.ImageIO; + /** * 基于Zxing的二维码工具类 * @@ -34,9 +40,59 @@ import java.util.HashMap; */ public class QrCodeUtil { + /** + * 生成代 logo 图片的 Base64 编码格式的二维码,以 String 形式表示 + * @param content 内容 + * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 + * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} + * @param logoBase64 logo 图片的 base64 编码 + * @return 图片 Base64 编码字符串 + */ + public static String generateAsBase64(String content, QrConfig qrConfig,String imageType,String logoBase64){ + byte[] decode; + try { + decode = Base64.getDecoder().decode(logoBase64); + }catch (Exception e){ + throw new QrCodeException(e); + } + return generateAsBase64(content,qrConfig,imageType,decode); + } + + /** + * 生成代 logo 图片的 Base64 编码格式的二维码,以 String 形式表示 + * @param content 内容 + * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 + * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} + * @param logo logo 图片的byte[] + * @return 图片 Base64 编码字符串 + */ + public static String generateAsBase64(String content, QrConfig qrConfig,String imageType,byte [] logo){ + BufferedImage img; + try { + img = ImageIO.read(new ByteArrayInputStream(logo)); + } catch (IOException e) { + throw new QrCodeException(e); + } + qrConfig.setImg(img); + return generateAsBase64(content,qrConfig, imageType); + } + + /** + * 生成 Base64 编码格式的二维码,以 String 形式表示 + * @param content 内容 + * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 + * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} + * @return 图片 Base64 编码字符串 + */ + public static String generateAsBase64(String content,QrConfig qrConfig,String imageType){ + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + generate(content,qrConfig,imageType,bos); + byte[] encode = Base64.getEncoder().encode(bos.toByteArray()); + return MessageFormat.format("data:image/{0};base64,{1}",imageType,new String(encode)); + } /** * 生成PNG格式的二维码图片,以byte[]形式表示 - * + * * @param content 内容 * @param width 宽度 * @param height 高度 @@ -51,7 +107,7 @@ public class QrCodeUtil { /** * 生成PNG格式的二维码图片,以byte[]形式表示 - * + * * @param content 内容 * @param config 二维码配置,包括长、宽、边距、颜色等 * @return 图片的byte[] 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 cc32c3d8c..fe29dfeed 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java @@ -1,7 +1,9 @@ package cn.hutool.extra.qrcode; import java.awt.Color; +import java.io.File; +import cn.hutool.core.codec.Base64; import org.junit.Ignore; import org.junit.Test; @@ -51,4 +53,18 @@ public class QrCodeUtilTest { String decode = QrCodeUtil.decode(FileUtil.file("e:/pic/qr.png")); Console.log(decode); } + + @Test + public void generateAsBase64Test(){ + String base64 = QrCodeUtil.generateAsBase64("http://hutool.cn/", new QrConfig(400, 400), "png"); + System.out.println(base64); + + byte[] bytes = FileUtil.readBytes( + new File("e:/pic/qr.png")); + String encode = Base64.encode(bytes); + String base641 = QrCodeUtil.generateAsBase64("http://hutool.cn/", new QrConfig(400, 400), "png", encode); + System.out.println(base641); + + } + } From 0d4da3bec49ecef4bacf6c2fb170d44aac3f66ae Mon Sep 17 00:00:00 2001 From: wb-zj268791 Date: Tue, 19 May 2020 14:42:55 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20QRCode=20=20base64=20?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=BD=A2=E5=BC=8F=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java | 1 + 1 file changed, 1 insertion(+) 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 fe29dfeed..0552d6c61 100644 --- a/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/qrcode/QrCodeUtilTest.java @@ -55,6 +55,7 @@ public class QrCodeUtilTest { } @Test + @Ignore public void generateAsBase64Test(){ String base64 = QrCodeUtil.generateAsBase64("http://hutool.cn/", new QrConfig(400, 400), "png"); System.out.println(base64); From addf09488def4eb3fc39056fe529ce76502ca713 Mon Sep 17 00:00:00 2001 From: helixcs Date: Tue, 19 May 2020 15:04:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20QRCode=20=20base64=20?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=BD=A2=E5=BC=8F=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/extra/qrcode/QrCodeUtil.java | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) 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 df6c28fff..735f43766 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/qrcode/QrCodeUtil.java @@ -42,31 +42,33 @@ public class QrCodeUtil { /** * 生成代 logo 图片的 Base64 编码格式的二维码,以 String 形式表示 - * @param content 内容 - * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 - * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} + * + * @param content 内容 + * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 + * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} * @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 imageType, String logoBase64) { byte[] decode; try { decode = Base64.getDecoder().decode(logoBase64); - }catch (Exception e){ + } catch (Exception e) { throw new QrCodeException(e); } - return generateAsBase64(content,qrConfig,imageType,decode); + return generateAsBase64(content, qrConfig, imageType, decode); } /** * 生成代 logo 图片的 Base64 编码格式的二维码,以 String 形式表示 - * @param content 内容 - * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 - * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} - * @param logo logo 图片的byte[] - * @return 图片 Base64 编码字符串 + * + * @param content 内容 + * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 + * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} + * @param logo logo 图片的byte[] + * @return 图片 Base64 编码字符串 */ - public static String generateAsBase64(String content, QrConfig qrConfig,String imageType,byte [] logo){ + public static String generateAsBase64(String content, QrConfig qrConfig, String imageType, byte[] logo) { BufferedImage img; try { img = ImageIO.read(new ByteArrayInputStream(logo)); @@ -74,21 +76,22 @@ public class QrCodeUtil { throw new QrCodeException(e); } qrConfig.setImg(img); - return generateAsBase64(content,qrConfig, imageType); + return generateAsBase64(content, qrConfig, imageType); } /** * 生成 Base64 编码格式的二维码,以 String 形式表示 - * @param content 内容 - * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 + * + * @param content 内容 + * @param qrConfig 二维码配置,包括长、宽、边距、颜色等 * @param imageType 图片类型(图片扩展名),见{@link ImgUtil} * @return 图片 Base64 编码字符串 */ - public static String generateAsBase64(String content,QrConfig qrConfig,String imageType){ + public static String generateAsBase64(String content, QrConfig qrConfig, String imageType) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); - generate(content,qrConfig,imageType,bos); + generate(content, qrConfig, imageType, bos); byte[] encode = Base64.getEncoder().encode(bos.toByteArray()); - return MessageFormat.format("data:image/{0};base64,{1}",imageType,new String(encode)); + return MessageFormat.format("data:image/{0};base64,{1}", imageType, new String(encode)); } /** * 生成PNG格式的二维码图片,以byte[]形式表示