Android 二维码相关(一)

Android 二维码相关(一)

本篇文章主要记录下android下使用zxing来创建二维码.
ZXing是一个开源的条形码和二维码处理库,支持多种编码格式,包括QR码、Data Matrix、EAN-13、Code 128等。

ZXing的主要特点包括:

多平台支持:ZXing可以在多种操作系统上运行,包括Windows、Linux、Mac等。
多种编程语言支持:ZXing提供了多种编程语言的接口,方便开发者在不同的环境下使用。
支持多种条码和二维码类型:ZXing支持解码和生成多种类型的条码和二维码,满足不同需求。
简单易用:ZXing提供了简单易用的API,方便开发者进行集成和使用。

1: 导入依赖

api "com.google.zxing:core:3.5.1"

2: 创建二维码

  1. 创建QRCodeWriter对象,QRCodeWriter是一个用于生成二维码的类。它是Google提供的ZXing库中的一个组件,用于将文本、URL、电话号码等信息编码成二维码图像。

    QRCodeWriter qrCodeWriter = new QRCodeWriter();	
    
  2. 将文本内容转换成BitMatrix

    BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, size, size);
    
  3. 创建bitmap

    Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565);
    
  4. 将BitMatrix渲染到bitmap

    for (int x = 0; x < size; x++) {
        for (int y = 0; y < size; y++) {
            //将BitMatrix渲染到bitmap
            bitmap.setPixel(x, y, encode.get(x, y) ? Color.BLACK : Color.WHITE);
        }
    }
    

完整的代码如下:

public class QRCodeUtils {
    private static final String TAG = "QRCodeUtils";
      /**
     * @param content 字符串内容
     * @param size    位图宽&高(单位:px)
     * @return
     */
    public static Bitmap createQRCodeBitmap(String content, int size) {
        if (TextUtils.isEmpty(content)) return null;
        if (size <= 0) return null;
        //创建QRCodeWriter对象
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        try {
            //使用QRCodeWriter将文本内容转换成BitMatrix.
            BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, size, size);
            Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.RGB_565);

            for (int x = 0; x < size; x++) {
                for (int y = 0; y < size; y++) {
                    //将BitMatrix渲染到bitmap
                    bitmap.setPixel(x, y, encode.get(x, y) ? Color.BLACK : Color.WHITE);
                }
            }
            return bitmap;
        } catch (Throwable e) {
            Log.e(TAG, "createQRCodeBitmap: ", e);
        }
        return null;
    }
}

3: 给二维码添加logo

给二维码添加logo 与上篇文章添加水印类似.

都是通过canvas重新绘制,合成图片.

具体的代码如下:

  /**
     * @param srcBitmap   二维码
     * @param logoBitmap  二维码logo
     * @param logoPercent 二维码logo的占比 [0,1]
     * @return
     */
    public static Bitmap addQRCodeLogo(Bitmap srcBitmap, Bitmap logoBitmap, float logoPercent) {
        //校验参数合法
        if (srcBitmap == null) return null;
        if (logoBitmap == null) return srcBitmap;
        if (logoPercent < 0 || logoPercent > 1) logoPercent = 0.2f;

        //原图/logo的宽高
        int srcWidth = srcBitmap.getWidth();
        int srcHeight = srcBitmap.getHeight();
        int logoHeight = logoBitmap.getHeight();
        int logoWidth = logoBitmap.getWidth();

        //缩放
        float scaleWidth = srcWidth * logoPercent / logoWidth;
        float scaleHeight = srcHeight * logoPercent / logoHeight;

        //使用Canvas绘制
        Bitmap bitmap = Bitmap.createBitmap(srcWidth, srcHeight, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(srcBitmap, 0, 0, null);
        canvas.scale(scaleWidth, scaleHeight, srcWidth / 2, srcHeight / 2);
        canvas.drawBitmap(logoBitmap, srcWidth / 2-logoWidth/2, srcHeight / 2-logoHeight/2, null);
        return bitmap;
    }

新增创建二维码方法:

/**
 * @param content 字符串内容
 * @param size    位图宽&高(单位:px)
 * @param logo    二维码logo
 * @param logoPercent 二维码logo的占比 [0,1]
 * @return
 */
public static Bitmap createQRCodeBitmap(String content, int size, Bitmap logo, float logoPercent) {
    Bitmap qrCodeBitmap = createQRCodeBitmap(content, size);
    Bitmap bitmap = addQRCodeLogo(qrCodeBitmap, logo, logoPercent);
    return bitmap;
}
  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值