package com.tejia.lijin.app.util.zxing;
|
|
import android.graphics.Bitmap;
|
|
import com.google.zxing.BarcodeFormat;
|
import com.google.zxing.EncodeHintType;
|
import com.google.zxing.MultiFormatWriter;
|
import com.google.zxing.WriterException;
|
import com.google.zxing.common.BitMatrix;
|
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
import com.journeyapps.barcodescanner.BarcodeEncoder;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 生成二维码
|
*
|
* @author PC
|
*/
|
public class ZxingUtils {
|
public static Bitmap createBitmap(String url, int width) {
|
Bitmap bitmap = null;
|
BitMatrix result = null;
|
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
|
try {
|
Map<EncodeHintType, Object> hints = new HashMap<>();
|
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);//设置容错率默认为最高
|
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 字符编码为UTF-8
|
hints.put(EncodeHintType.MARGIN, 0);//二维码空白区域,最小为0也有白边,只是很小,最小是6像素左右
|
result = multiFormatWriter.encode(url, BarcodeFormat.QR_CODE, width, width, hints);
|
result = deleteWhite(result);
|
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
|
bitmap = barcodeEncoder.createBitmap(result);
|
} catch (WriterException e) {
|
e.printStackTrace();
|
} catch (IllegalArgumentException iae) { // ?
|
return null;
|
}
|
return bitmap;
|
}
|
|
private 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;
|
}
|
}
|