zxing

zxing 相关网站

https://zxing.github.io/zxing/apidocs/

https://zxing.github.io/zxing/

代码示例

import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.sankuai.cx.etcp.code.exception.BizException;
import com.sankuai.cx.etcp.code.exception.ErrorEnum;
import lombok.extern.slf4j.Slf4j;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;

/**
* @Author:wangchao
* @Date: 2019/2/19 下午2:19
* @Description:
**/
@Slf4j
public class ZxingQrCodeUtil {

private static String FORMAT = "png";//二维码格式

/**
*
* @param content 二维码内容
* @param width 宽
* @param height 高
* @param errorCorrection 容错登记
* @return
*/
public static String createZxingqrCode(String content,int width,int height,String errorCorrection){
//定义二维码参数
Map hints=new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "iso-8859-1");//设置编码
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.valueOf(errorCorrection));//设置容错等级
hints.put(EncodeHintType.MARGIN, 0);//设置边距默认是5
try {
BitMatrix bitMatrix=new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
BitMatrix resbitMatrix = deleteWhite(bitMatrix);//删除白边
ByteArrayOutputStream baos = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(resbitMatrix,FORMAT,baos);
byte[] b = baos.toByteArray();

// Path path = new File("/Users/charlie/Desktop/qr.png").toPath();
// MatrixToImageWriter.writeToPath(bitMatrix, FORMAT, path);//写到指定路径下
return Base64.getEncoder().encodeToString(b);
} catch (Exception e) {
throw new BizException(e,ErrorEnum.ZXING_ERROR.getCode());
}
}
//读取二维码
public static void readZxingQrCode(){
MultiFormatReader reader = new MultiFormatReader();
File file = new File("/Users/charlie/Desktop/yitongxing.jpg");
try {
BufferedImage image = ImageIO.read(file);
BinaryBitmap binaryBitmap=new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
Map hints=new HashMap();
hints.put(DecodeHintType.CHARACTER_SET, StandardCharsets.ISO_8859_1);//设置编码
// hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);

Result result = reader.decode(binaryBitmap,hints);
byte[] b = result.getRawBytes();
System.out.println("解析结果:"+result.toString());
String s = HexUtil.byteToHex(result.toString().getBytes(StandardCharsets.ISO_8859_1));
System.out.println(s);
System.out.println(s.length());
System.out.println("二维码格式:"+result.getBarcodeFormat());
System.out.println("二维码文本内容:"+result.getText());
} catch (Exception e) {
log.error("read zxing pic error",e);
}
}

/**
* 消除白边
*/
public static BitMatrix deleteWhite(BitMatrix matrix){
int[] rec = matrix.getEnclosingRectangle();
int resWidth = rec[2] + 1;
int resHeight = rec[3] + 1;

BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
resMatrix.clear();
for (int i = 0; i < resWidth; i++) {
for (int j = 0; j < resHeight; j++) {
if (matrix.get(i + rec[0], j + rec[1])) {
resMatrix.set(i, j);
}
}
}
return resMatrix;
}

public static void main(String[] args) {
// String s = "8001883030303030303030303133363334323203115110300001083132031019400310194000000500203012310120064D54445001010055602A44BF82FE0C8793B8077CC5DCAFD2863E803F5C413F2C5895AC79A6BC7B7E9AC440F637D3A901838D1D741F55869D606493DC5E7D9E25FB1D59F34BD7954CC30089";
// byte[] b = HexUtil.hexStringToBytes(s);
// String ss = new String(b, StandardCharsets.ISO_8859_1);
// createZxingqrCode(ss,240,240,"M");
readZxingQrCode();
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值