新增 QRCode base64 编码形式返回

This commit is contained in:
wb-zj268791 2020-05-19 14:42:02 +08:00
parent a4bc10801c
commit 5d5480af45
2 changed files with 74 additions and 2 deletions

View File

@ -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[]

View File

@ -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);
}
}