您的位置:

从多方面详解zxing生成二维码

一、生成二维码的app

对于需要频繁使用二维码生成功能的人来说,下载一个二维码生成的app是一个不错的选择。其中,zxing是一款非常优秀的二维码生成app。

使用zxing生成二维码的步骤十分简单:

compile 'com.google.zxing:core:3.3.0'

导入依赖的库后,在代码中进行调用:

//生成二维码图片,并返回其bitmap对象
public Bitmap createQRCodeBitmap(String content) {
    //定义二维码参数
    Map<EncodeHintType, Object> hints = new HashMap<>();
    hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
    hints.put(EncodeHintType.MARGIN, 0);

    try {
        //生成二维码矩阵
        BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 300, 300, hints);
        int width = matrix.getWidth();
        int height = matrix.getHeight();

        //将二维码矩阵转换为bitmap对象,并返回
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                bitmap.setPixel(x, y, matrix.get(x, y) ? Color.BLACK : Color.WHITE);
            }
        }
        return bitmap;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

其中,参数"content"代表着二维码中包含的内容,可以是链接、文字等等。

二、生成二维码在线生成

在线生成二维码的方式适合于只需要偶尔使用二维码生成功能的用户。zxing也提供了在线生成二维码的功能网站,我们只需要在网站上输入要生成的内容,就可以获得相应的二维码图片。

网址是:http://zxing.net/qrcode/generator

在这个网站上,我们可以选择二维码的大小、颜色、后景颜色、容错率等等。

三、生成二维码在哪里找

除了使用手机app或者在线生成,我们也可以直接在其他的应用程序中找到二维码生成的功能。例如,微信的扫一扫功能就包含了二维码生成的功能。

具体使用步骤如下:

  1. 在微信中打开扫一扫,并选择“我的二维码”
  2. 在弹出的二维码页面中输入需要生成的内容,并选择生成的样式
  3. 点击生成
  4. 长按生成的二维码,选择保存图片即可

四、二维码生成器

除了zxing之外,还有许多优秀的二维码生成器可供使用。

其中,QR Code Generator就是一个不错的选择。它支持多种不同的二维码类型,支持多种不同的内容格式,可以自定义二维码颜色、大小等等。

网址是:https://www.qr-code-generator.com/

五、二维码生成

二维码生成基本的原理就是将需要转化的数据使用算法编码成为一个二维码矩阵,然后使用指定的样式进行渲染。生成的二维码矩阵包含了所需要的数据

下面是一个基本的例子,在控制台中打印二维码的矩阵信息:

//生成二维码矩阵
BitMatrix bitMatrix = new QRCodeWriter().encode("https://www.baidu.com", BarcodeFormat.QR_CODE, 300, 300, hints);
for (int y = 0; y < bitMatrix.getHeight(); y++) {
    for (int x = 0; x < bitMatrix.getWidth(); x++) {
        System.out.print(bitMatrix.get(x, y) ? "1" : "0");
    }
    System.out.println();
}

六、二维码生成版

二维码生成版是一个较为完整的二维码生成工具。

具有以下特点:

  • 支持多种不同的二维码类型
  • 支持多种不同的内容格式
  • 支持自定义二维码颜色、大小、前景色、后景色等等
  • 支持批量生成二维码
  • 支持将已经生成的二维码进行导出

七、二维码生成活码

二维码生成活码是指将一个二维码与某些信息进行关联,并且可以动态更新这些信息。

下面是一个使用二维码生成活码的例子:

//使用二维码生成活码
String content = "http://www.baidu.com";
BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, 300, 300);

//创建数据
Map<String, Object> data = new HashMap<>();
data.put("id", 1);
data.put("username", "张三");
data.put("message", "您的订单已经发货。");

//将数据关联到二维码上,并返回动态二维码图片地址
String qrcodeUrl = QRCodeUtils.generateDynamicQRCode(content, data, 300, 300);

八、二维码生成样式

二维码生成样式是指指定二维码的颜色、大小、前景色、后景色等等。

下面是一个例子:

//定义二维码参数
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 0);

//定义二维码颜色,前景色,后景色
int QRcodeColor = 0xff000000;
int fillColor = 0xffff00ff;
int frameColor = 0xff00ff00;

//生成二维码矩阵
BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, 300, 300, hints);
for (int y = 0; y < bitMatrix.getHeight(); y++) {
    for (int x = 0; x < bitMatrix.getWidth(); x++) {
        if (bitMatrix.get(x, y)) {
            canvas.drawPoint(x, y, mPaint);
        } else {
            canvas.drawPoint(x, y, mFramePaint);
        }
    }
}

九、生成的二维码在哪里

生成的二维码在文件系统中,并且可以使用所在应用程序进行导出。

下面是一个导出二维码的例子:

//将二维码Bitmap对象保存到文件中,然后通知系统更新图片媒体库以便其他应用也能看到
public static void saveBitmapToFile(Context context, Bitmap bitmap, String fileName) {
    if (bitmap == null) {
        Log.e(TAG, "saveBitmapToFile: bitmap is null.");
        return;
    }
    final File directory = context.getExternalFilesDir(Environment.DIRECTORY_DCIM);
    if (!directory.exists()) {
        directory.mkdirs();
    }
    final File file = new File(directory, fileName + ".jpg");
    OutputStream outputStream = null;
    try {
        outputStream = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream.flush();
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
    } catch (Exception e) {
        Log.e(TAG, "saveBitmapToFile: ", e);
    } finally {
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                Log.e(TAG, "saveBitmapToFile: ", e);
            }
        }
    }
}