1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| public class QRUtil {
public static Bitmap createQRImage(String content, int width, int height, Bitmap logo) { try { if (content == null || "".equals(content)) { return null; } Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hints.put(EncodeHintType.MARGIN, 1);
BitMatrix bitMatrix = null; try { bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); } catch (WriterException e) { e.printStackTrace(); } 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 * width + x] = 0xff000000; } else { pixels[y * width + x] = 0xffffffff; } } }
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
if (logo != null) { bitmap = addLogo(bitmap, logo); } return bitmap; } catch (Exception e) { e.printStackTrace(); } return null; }
private static Bitmap addLogo(Bitmap src, Bitmap logo) { if (src == null) { return null; }
if (logo == null) { return src; }
int srcWidth = src.getWidth(); int srcHeight = src.getHeight(); int logoWidth = logo.getWidth(); int logoHeight = logo.getHeight();
if (srcWidth == 0 || srcHeight == 0) { return null; }
if (logoWidth == 0 || logoHeight == 0) { return src; }
float scaleFactor = srcWidth * 1.0f / 5 / logoWidth; Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.ARGB_8888); try { Canvas canvas = new Canvas(bitmap); canvas.drawBitmap(src, 0, 0, null); canvas.scale(scaleFactor, scaleFactor, srcWidth / (float) 2, srcHeight / (float) 2); canvas.drawBitmap(logo, (srcWidth - logoWidth) / (float) 2, (srcHeight - logoHeight) / (float) 2, null); canvas.save(); canvas.restore(); } catch (Exception e) { bitmap = null; e.getStackTrace(); }
return bitmap; } }
|