目录
一.zxing jar包地址
链接: https://pan.baidu.com/s/1toPsCFS1yV6ZifXC1hwwkw?pwd=y12a 提取码: y12a 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v3的分享
二.封装工具类
public class QRCodeUtils { /** * 生成二维码 * * @param url 需要生成二维码的网址 * @param size 需要生成二维码的大小 * @return bitmap */ public static Bitmap createQRCode(String url, int size) { Bitmap bitmap = null; try { HashMap<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.MARGIN, 0); BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, size, size, hints); bitMatrix = deleteWhite(bitMatrix); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (bitMatrix.get(x, y)) { pixels[y * height + x] = Color.BLACK; } else { pixels[y * height + x] = Color.WHITE; } } } bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); } catch (Throwable e) { } return bitmap; } /** * 生成带logo的二维码 * * @param url 需要生成二维码的网址 * @param size 需要生成二维码的大小 * @param logo logo * @return bitmap */ public static Bitmap createQRCodeWithLogo(String url, int size, Bitmap logo) { Bitmap bitmap = null; try { HashMap<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.MARGIN, 0); /* * 设置容错级别,默认为ErrorCorrectionLevel.L * 因为中间加入logo所以建议你把容错级别调至H,否则可能会出现识别不了 */ hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, size, size, hints); bitMatrix = deleteWhite(bitMatrix); int width = bitMatrix.getWidth();//矩阵高度 int height = bitMatrix.getHeight();//矩阵宽度 int halfWidth = width / 2; int halfHeight = height / 2; //将logo图片缩放成二维码的5分之一大小 int halfLogoWidth = 0; int halfLogoHeight = 0; if (logo != null) { logo = Bitmap.createScaledBitmap(logo, width / 5, height / 5, false); halfLogoWidth = logo.getWidth() / 2; halfLogoHeight = logo.getHeight() / 2; } int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (logo != null && x > halfWidth - halfLogoWidth && x < halfWidth + halfLogoWidth && y > halfHeight - halfLogoHeight && y < halfHeight + halfLogoHeight) { //该位置用于存放图片信息 //记录图片每个像素信息 //如果log为null, pixels[y * height + x] = logo.getPixel(x - halfWidth + halfLogoWidth, y - halfHeight + halfLogoHeight); } else { if (bitMatrix.get(x, y)) { pixels[y * height + x] = Color.BLACK; } else { pixels[y * height + x] = Color.WHITE; } } } } bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); } catch (Throwable e) { e.printStackTrace(); } return bitmap; } private static BitMatrix deleteWhite(BitMatrix matrix) { int[] rec = matrix.getEnclosingRectangle(); if (rec[0] == 0 && rec[1] == 0) { return matrix; } 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; } }