安卓开发中使用ZXing生成解析二维码

编码示例

package com.wolf_pan.qrcodesample;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;

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;

import java.util.HashMap;

public class EncodingSampleActivity extends AppCompatActivity {
    private LinearLayout encodingSampleLinearLayout;
    private EditText textToEncodeEditText;
    private ImageView encodedImageView;
    private final String tag = "EncodingSampleActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_encoding_sample);
        encodingSampleLinearLayout = findViewById(R.id.encodingSampleLinearLayout);
        textToEncodeEditText = findViewById(R.id.textToEncodeEditText);
        encodedImageView = findViewById(R.id.encodedImageView);
        findViewById(R.id.encodeButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String contents = textToEncodeEditText.getText().toString();
                if (contents.isEmpty())
                    contents = "在此输入要编码的文本";
                try {
                    int width = encodingSampleLinearLayout.getWidth() - 50, height = width;
                    HashMap<EncodeHintType, String> hints = new HashMap<>();
                    hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
                    BitMatrix bitMatrix = new QRCodeWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);
                    int[] colors = new int[width * height];
                    for (int y = 0; y < height; ++y) {
                        for (int x = 0; x < width; ++x)
                            colors[width * y + x] = bitMatrix.get(x, y) ? Color.RED : Color.WHITE;
                    }
                    Bitmap qrcodeBitmap = Bitmap.createBitmap(colors, width, height, Bitmap.Config.RGB_565);
                    encodedImageView.setImageBitmap(qrcodeBitmap);
                } catch (WriterException ex) {
                    Log.e(tag, "ex: " + ex);
                }
            }
        });
    }
}

解码示例

package com.wolf_pan.qrcodesample;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;

import java.io.IOException;

public class DecodingSampleActivity extends AppCompatActivity {
    public ImageView qrcodeToDecodeImageView;
    public TextView decodedTextView;
    private Bitmap bitmap;
    private final String tag = "DecodingSampleActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_decoding_sample);
        qrcodeToDecodeImageView = findViewById(R.id.qrcodeToDecodeImageView);
        decodedTextView = findViewById(R.id.decodedTextView);
        findViewById(R.id.decodeButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    int width = bitmap.getWidth(), height = bitmap.getHeight();
                    int[] pixels = new int[width * height];
                    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
                    String decoded = new QRCodeReader().decode(new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(width, height, pixels)))).getText();
                    decodedTextView.setText(decoded);
                } catch (Exception ex) {
                    Log.e(tag, "ex: " + ex);
                }
            }
        });
        try {
            bitmap = BitmapFactory.decodeStream(getAssets().open("qrcode_qq.png"));
            qrcodeToDecodeImageView.setImageBitmap(bitmap);
        } catch (IOException ex) {
            Log.e(tag, "ex: " + ex);
        }
    }
}

原文地址:https://www.cnblogs.com/buyishi/p/9311272.html

时间: 2024-08-14 17:50:22

安卓开发中使用ZXing生成解析二维码的相关文章

Java使用ZXing生成/解析二维码图片

ZXing是一种开源的多格式1D/2D条形码图像处理库,在Java中的实现.重点是在手机上使用内置摄像头来扫描和解码设备上的条码,而不与服务器通信.然而,该项目也可以用于对桌面和服务器上的条形码进行编码和解码.目前支持这些格式: UPC-A and UPC-E EAN-8 and EAN-13 Code 39 Code 93 Code 128 ITF Codabar RSS-14 (all variants) RSS Expanded (most variants) QR Code Data M

servlet中用ZXing生成条码二维码并输出到web页面的示例

1.生成条码的servlet代码: import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletR

APS.NET MVC4生成解析二维码简单Demo

一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.8.2.min.js"></scri

[Python]在Windows系统中使用ZXing模块实现二维码、条形码读码

??需要实现Python读取图片中二维码.条形码信息.前段时间研究使用zbarlight模块,费了很大功夫安装调试好,但是发现有些图片读取不正确,而且如果图片中二维码倾斜,就读取不了,不能满足要求.昨天琢磨着试一试ZXing,下载ZXing模块安装后,却一直报错.打开模块源码仔细分析,原来该模块是通过调用java程序,使用ZXing的java库来实现的,通过分析命令行输出得到解码结果.忙活了一天多,各种测试.查资料,终于解决了问题.调试过程非常艰辛,现将做法整理如下(Windows 10系统):

几行代码搞定java生成解析二维码功能

最近公司要求扫描二维码和生成二维码的功能.而群里部分网友也提到了.我这里就写了一个demo,和大家分享.代码很简介,希望大家能够喜欢. 网友表示在网上搜索了很多,发现不是代码不全,就是jar不匹配. 我这里共享了一个zxing的2.2版本的例子,也提供了下载地址.实现代码如下: package com.herman.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep

java生成二维码/java解析二维码

二维码的优缺点 优点:1. 高密度编码,信息容量大:2.编码范围广:3.容错能力强:4.译码可靠性高:5.可引入加密措施:6.成本低,易制作,持久耐用. 缺点:1.二维码技术成为手机病毒.钓鱼网站传播的新渠道:2.信息容易泄露. 三大国际标准 1.PDF417:不支持中文: 2.DM:专利未公开,需要支付专利费用: 3.QR Code:专利公开,支持中文. 其中,QR Code具有识读速度快.数据密度大.占用空间小的优势. 纠错能力 L级:约可纠错7%的数据码字 M级:约可纠错15%的数据码字

Java使用Zxing生成、解析二维码工具类

Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法. 1.二维码的生成 (1).将Zxing-core.jar 包加入到classpath下. (2).二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的; package com.qlwb.business.util; //导入省略... /** * 二维码工具类 * */ public class MatrixToLogoImageWriter { priva

使用zxing生成和解析二维码

二维码: 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的: 在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理: 二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息: 二维码相对于条形码的优势就是省空间: zxing简介: zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库

用zxing生成和解析二维码

package test; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; import org.junit.Test; import com.google.zxing.BarcodeFormat; import com