奇技淫巧之生成二维码工具类

Posted by 夏敏的博客 on January 7, 2017

前言

生成二维码是我们经常要做的事情,而google为我们提供了zxing这个生成二维码的工具包,帮助我们生成二维码.
在此附上所用的生成二维码工具类.

工具类

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;

import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;


public class Utils {


    public static Bitmap createQRImage(Context context, View view, String id) {
        try {
            if (id == null || id.isEmpty()) {
                return null;
            }
            int width = 520;
            int height = 520;
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
            BitMatrix bitMatrix = new QRCodeWriter().encode(id,
                    BarcodeFormat.QR_CODE, width, height, hints);
            bitMatrix = deleteWhite(bitMatrix);
            int[] rec = bitMatrix.getEnclosingRectangle();
            width = rec[2] + 1;
            height = rec[3] + 1;
            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.ARGB_8888);
            bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
            return bitmap;
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }

    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;
    }
}

使用

        ImageView mQRCode = (ImageView) mView.findViewById(R.id.qrcode);
        Bitmap bitmap = Utils.createQRImage(context, mQRCode, info);
        if (bitmap != null && !bitmap.isRecycled()) {
            mQRCode.setImageBitmap(bitmap);
        }
作者:Anderson大码渣,欢迎关注我的简书: Anderson大码渣