fix qr test

This commit is contained in:
Looly 2021-10-26 22:19:59 +08:00
parent 93a901d864
commit a77dce46cd
6 changed files with 36 additions and 9 deletions

View File

@ -15,6 +15,7 @@
### 🐞Bug修复 ### 🐞Bug修复
* 【core 】 修复UrlBuilder.addPath歧义问题issue#1912@Github * 【core 】 修复UrlBuilder.addPath歧义问题issue#1912@Github
* 【core 】 修复StrBuilder中总长度计算问题issue#I4F9L7@Gitee
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------

View File

@ -579,7 +579,7 @@ public class StrBuilder implements CharSequence, Appendable, Serializable {
private static int totalLength(CharSequence... strs) { private static int totalLength(CharSequence... strs) {
int totalLength = 0; int totalLength = 0;
for (CharSequence str : strs) { for (CharSequence str : strs) {
totalLength += (null == str ? 4 : str.length()); totalLength += (null == str ? 0 : str.length());
} }
return totalLength; return totalLength;
} }

View File

@ -1,13 +1,12 @@
package cn.hutool.crypto.digest; package cn.hutool.crypto.digest;
import cn.hutool.core.util.CharsetUtil;
import javax.crypto.SecretKey;
import java.io.File; import java.io.File;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import javax.crypto.SecretKey;
import cn.hutool.core.util.CharsetUtil;
/** /**
* 摘要算法工具类 * 摘要算法工具类
* *
@ -424,7 +423,7 @@ public class DigestUtil {
* 创建HMac对象调用digest方法可获得hmac值 * 创建HMac对象调用digest方法可获得hmac值
* *
* @param algorithm {@link HmacAlgorithm} * @param algorithm {@link HmacAlgorithm}
* @param key 密钥如果为<code>null</code>生成随机密钥 * @param key 密钥如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
* @since 3.0.3 * @since 3.0.3
*/ */
@ -436,7 +435,7 @@ public class DigestUtil {
* 创建HMac对象调用digest方法可获得hmac值 * 创建HMac对象调用digest方法可获得hmac值
* *
* @param algorithm {@link HmacAlgorithm} * @param algorithm {@link HmacAlgorithm}
* @param key 密钥{@link SecretKey}如果为<code>null</code>生成随机密钥 * @param key 密钥{@link SecretKey}如果为{@code null}生成随机密钥
* @return {@link HMac} * @return {@link HMac}
* @since 3.0.3 * @since 3.0.3
*/ */

View File

@ -313,9 +313,10 @@ public class QrCodeUtil {
// 默认配置 // 默认配置
config = new QrConfig(); config = new QrConfig();
} }
BitMatrix bitMatrix; BitMatrix bitMatrix;
try { try {
bitMatrix = multiFormatWriter.encode(content, format, config.width, config.height, config.toHints()); bitMatrix = multiFormatWriter.encode(content, format, config.width, config.height, config.toHints(format));
} catch (WriterException e) { } catch (WriterException e) {
throw new QrCodeException(e); throw new QrCodeException(e);
} }

View File

@ -3,6 +3,7 @@ package cn.hutool.extra.qrcode;
import cn.hutool.core.img.ImgUtil; import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType; import com.google.zxing.EncodeHintType;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
@ -331,13 +332,31 @@ public class QrConfig {
* @return 配置 * @return 配置
*/ */
public HashMap<EncodeHintType, Object> toHints() { public HashMap<EncodeHintType, Object> toHints() {
return toHints(BarcodeFormat.QR_CODE);
}
/**
* 转换为Zxing的二维码配置
*
* @param format 格式根据格式不同{@link #errorCorrection}的值类型有所不同
* @return 配置
*/
public HashMap<EncodeHintType, Object> toHints(BarcodeFormat format) {
// 配置 // 配置
final HashMap<EncodeHintType, Object> hints = new HashMap<>(); final HashMap<EncodeHintType, Object> hints = new HashMap<>();
if (null != this.charset) { if (null != this.charset) {
hints.put(EncodeHintType.CHARACTER_SET, charset.toString().toLowerCase()); hints.put(EncodeHintType.CHARACTER_SET, charset.toString().toLowerCase());
} }
if (null != this.errorCorrection) { if (null != this.errorCorrection) {
hints.put(EncodeHintType.ERROR_CORRECTION, this.errorCorrection); Object value;
if(BarcodeFormat.AZTEC == format || BarcodeFormat.PDF_417 == format){
// issue#I4FE3U@Gitee
value = this.errorCorrection.getBits();
} else {
value = this.errorCorrection;
}
hints.put(EncodeHintType.ERROR_CORRECTION, value);
} }
if (null != this.margin) { if (null != this.margin) {
hints.put(EncodeHintType.MARGIN, this.margin); hints.put(EncodeHintType.MARGIN, this.margin);

View File

@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64;
import cn.hutool.core.img.ImgUtil; import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Ignore; import org.junit.Ignore;
@ -87,4 +88,10 @@ public class QrCodeUtilTest {
final String decode = QrCodeUtil.decode(ImgUtil.read("d:/test/qr_a.png"), false, true); final String decode = QrCodeUtil.decode(ImgUtil.read("d:/test/qr_a.png"), false, true);
Console.log(decode); Console.log(decode);
} }
@Test
public void pdf417Test(){
final BufferedImage image = QrCodeUtil.generate("content111", BarcodeFormat.PDF_417, QrConfig.create());
Assert.assertNotNull(image);
}
} }