ZXing生成二维码

1.下载jar

https://github.com/ZF520/QRCode/raw/master/zxing/bin/lib/zxing3.3.1.jar

2.生成二维码的函数:

    private ImageView im1;  //imageview图片private int w,h;        //图片宽度w,高度h//转换成二维码QRcode的函数。参数为一个字符串public void createQRcodeImage(String url){ im1=(ImageView)findViewById(R.id.imageView);w=im1.getWidth();h=im1.getHeight();try{//判断URL合法性if (url == null || "".equals(url) || url.length() < 1){return;}Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//图像数据转换,使用了矩阵转换BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, w, h, hints);int[] pixels = new int[w * h];//下面这里按照二维码的算法,逐个生成二维码的图片,//两个for循环是图片横列扫描的结果for (int y = 0; y < h; y++){for (int x = 0; x < w; x++){if (bitMatrix.get(x, y)){pixels[y * w + x] = 0xff000000;}else{pixels[y * w + x] = 0xffffffff;}}}//生成二维码图片的格式,使用ARGB_8888Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, w, 0, 0, w, h);//显示到我们的ImageView上面im1.setImageBitmap(bitmap);}catch (Exception e){e.printStackTrace();}}

3.识别二维码的函数:

 //识别二维码的函数public void recogQRcode(ImageView imageView){Bitmap QRbmp = ((BitmapDrawable) (imageView).getDrawable()).getBitmap();   //将图片bitmap化int width = QRbmp.getWidth();int height = QRbmp.getHeight();int[] data = new int[width * height];QRbmp.getPixels(data, 0, width, 0, 0, width, height);    //得到像素RGBLuminanceSource source = new RGBLuminanceSource(QRbmp);   //RGBLuminanceSource对象BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));QRCodeReader reader = new QRCodeReader();Result re = null;try {//得到结果re = reader.decode(bitmap1);} catch (Exception e) {e.printStackTrace();}//Toast出内容Toast.makeText(MainActivity.this,re.getText(),Toast.LENGTH_SHORT).show();//利用正则表达式判断内容是否是URL,是的话则打开网页String regex = "(((https|http)?://)?([a-z0-9]+[.])|(www.))"+ "\\w+[.|\\/]([a-z0-9]{0,})?[[.]([a-z0-9]{0,})]+((/[\\S&&[^,;\u4E00-\u9FA5]]+)+)?([.][a-z0-9]{0,}+|/?)";//设置正则表达式Pattern pat = Pattern.compile(regex.trim());//比对Matcher mat = pat.matcher(re.getText().trim());if (mat.matches()){Uri uri = Uri.parse(re.getText());Intent intent = new Intent(Intent.ACTION_VIEW, uri);//打开浏览器startActivity(intent);}}//识别图片所需要的RGBLuminanceSource类public class RGBLuminanceSource extends LuminanceSource {private byte bitmapPixels[];protected RGBLuminanceSource(Bitmap bitmap) {super(bitmap.getWidth(), bitmap.getHeight());// 首先,要取得该图片的像素数组内容int[] data = new int[bitmap.getWidth() * bitmap.getHeight()];this.bitmapPixels = new byte[bitmap.getWidth() * bitmap.getHeight()];bitmap.getPixels(data, 0, getWidth(), 0, 0, getWidth(), getHeight());// 将int数组转换为byte数组,也就是取像素值中蓝色值部分作为辨析内容for (int i = 0; i < data.length; i++) {this.bitmapPixels[i] = (byte) data[i];}}@Overridepublic byte[] getMatrix() {// 返回我们生成好的像素数据return bitmapPixels;}@Overridepublic byte[] getRow(int y, byte[] row) {// 这里要得到指定行的像素数据System.arraycopy(bitmapPixels, y * getWidth(), row, 0, getWidth());return row;}}

完整代码及效果

主界面Activity代码


import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.Result;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
import com.google.zxing.qrcode.QRCodeWriter;import java.util.Hashtable;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class MainActivity extends AppCompatActivity {private ImageView im1;  //imageview图片private int w,h;        //图片宽度w,高度h@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = findViewById(R.id.but_ton);Button but_r = findViewById(R.id.but_r);final EditText editText = findViewById(R.id.edit_Text);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String url = editText.getText().toString();createQRcodeImage(url);}});but_r.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {recogQRcode(im1);}});}//转换成二维码QRcode的函数。参数为一个字符串public void createQRcodeImage(String url){im1=(ImageView)findViewById(R.id.imageView);w=im1.getWidth();h=im1.getHeight();try{//判断URL合法性if (url == null || "".equals(url) || url.length() < 1){return;}Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//图像数据转换,使用了矩阵转换BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, w, h, hints);int[] pixels = new int[w * h];//下面这里按照二维码的算法,逐个生成二维码的图片,//两个for循环是图片横列扫描的结果for (int y = 0; y < h; y++){for (int x = 0; x < w; x++){if (bitMatrix.get(x, y)){pixels[y * w + x] = 0xff000000;}else{pixels[y * w + x] = 0xffffffff;}}}//生成二维码图片的格式,使用ARGB_8888Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);bitmap.setPixels(pixels, 0, w, 0, 0, w, h);//显示到我们的ImageView上面im1.setImageBitmap(bitmap);}catch (Exception e){e.printStackTrace();}}//识别二维码的函数public void recogQRcode(ImageView imageView){Bitmap QRbmp = ((BitmapDrawable) (imageView).getDrawable()).getBitmap();   //将图片bitmap化int width = QRbmp.getWidth();int height = QRbmp.getHeight();int[] data = new int[width * height];QRbmp.getPixels(data, 0, width, 0, 0, width, height);    //得到像素RGBLuminanceSource source = new RGBLuminanceSource(QRbmp);   //RGBLuminanceSource对象BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));QRCodeReader reader = new QRCodeReader();Result re = null;try {//得到结果re = reader.decode(bitmap1);} catch (Exception e) {e.printStackTrace();}//Toast出内容Toast.makeText(MainActivity.this,re.getText(),Toast.LENGTH_SHORT).show();//利用正则表达式判断内容是否是URL,是的话则打开网页String regex = "(((https|http)?://)?([a-z0-9]+[.])|(www.))"+ "\\w+[.|\\/]([a-z0-9]{0,})?[[.]([a-z0-9]{0,})]+((/[\\S&&[^,;\u4E00-\u9FA5]]+)+)?([.][a-z0-9]{0,}+|/?)";//设置正则表达式Pattern pat = Pattern.compile(regex.trim());//比对Matcher mat = pat.matcher(re.getText().trim());if (mat.matches()){Uri uri = Uri.parse(re.getText());Intent intent = new Intent(Intent.ACTION_VIEW, uri);//打开浏览器startActivity(intent);}}//识别图片所需要的RGBLuminanceSource类public class RGBLuminanceSource extends LuminanceSource {private byte bitmapPixels[];protected RGBLuminanceSource(Bitmap bitmap) {super(bitmap.getWidth(), bitmap.getHeight());// 首先,要取得该图片的像素数组内容int[] data = new int[bitmap.getWidth() * bitmap.getHeight()];this.bitmapPixels = new byte[bitmap.getWidth() * bitmap.getHeight()];bitmap.getPixels(data, 0, getWidth(), 0, 0, getWidth(), getHeight());// 将int数组转换为byte数组,也就是取像素值中蓝色值部分作为辨析内容for (int i = 0; i < data.length; i++) {this.bitmapPixels[i] = (byte) data[i];}}@Overridepublic byte[] getMatrix() {// 返回我们生成好的像素数据return bitmapPixels;}@Overridepublic byte[] getRow(int y, byte[] row) {// 这里要得到指定行的像素数据System.arraycopy(bitmapPixels, y * getWidth(), row, 0, getWidth());return row;}}}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><ImageViewandroid:id="@+id/imageView"android:layout_width="300dp"android:layout_height="300dp"app:srcCompat="@android:color/background_light" /><EditTextandroid:id="@+id/edit_Text"android:layout_width="300dp"android:layout_height="wrap_content"android:ems="10"android:hint="输入要转换的内容"android:inputType="textPersonName" /><Buttonandroid:id="@+id/but_ton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="生成二维码"/><Buttonandroid:id="@+id/but_r"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="识别二维码"/></LinearLayout>

效果

借鉴

https://blog.csdn.net/mountain_hua/article/details/80646089

zxing生成二维码及解析二维码相关推荐

  1. 利用ZXing工具生成二维码以及解析二维码

    今天突然想到二维码是如何存储信息的.于是就开始各种搜索,最终自己也利用Google的ZXing工具完成了一个生成二维码和解析二维码的简单程序. 一. 二维码生成原理(即工作原理) 二维码官方叫版本Ve ...

  2. Java利用Zxing生成二维码及解析二维码内容

    前言 Java 操作二维码的开源项目很多,如 SwetakeQRCode.BarCode4j.Zxing 等等 本篇文章是介绍利用Zxing来生成二维码图片在web网页上展示,同时解析二维码图片. Z ...

  3. llqrcode.js识别二维码,解析二维码信息

    llqrcode.js具有扫描二维码功能,用来进行从图片中识别二维码,可解析二维码的信息. 直接上代码 <!DOCTYPE html> <html> <head>& ...

  4. 【zxing生成二维码及解析二维码】

    导入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><gr ...

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

    二维码的优缺点 优点:1. 高密度编码,信息容量大:2.编码范围广:3.容错能力强:4.译码可靠性高:5.可引入加密措施:6.成本低,易制作,持久耐用. 缺点:1.二维码技术成为手机病毒.钓鱼网站传播 ...

  6. java 生成二维码,解析二维码

    今天遇到需求,使用Java生成二维码图片,网搜之后,大神们早就做过,个人总结一下. 目标:借助Google提供的ZXing Core工具包,使用Java语言实现二维码的生成和解析. 步骤如下: 1.m ...

  7. QRCode生成二维码和解析二维码

    使用QRCode生成和解析二维码,这个和前面的不一样,只要盗图两个jar(后面上传),即可生成二维码 直接上代码,注释都有 Qrcode qrcode=new Qrcode();qrcode.setQ ...

  8. xing生成二维码与解析二维码

    //用xing方式生成二维码public void XingGet(){int width=300;int height=300;String format="png";Strin ...

  9. js生成二维码和解析二维码

    这个整了好久,用的包换了好几次,所以记录一下 生成二维码 <div class="container"><div class="row"> ...

最新文章

  1. Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅!
  2. matlab bfs函数,matlab练习程序(广度优先搜索BFS、深度优先搜索DFS)
  3. 推荐11个实用的JavaScript库
  4. [问题处理]redmine的gantt图导出出现‘星星星星星星星星’怎么解决
  5. Linux 服务器如何修改主机名
  6. 【❗JS奇技淫巧❗】JavaScript:截取DataURL中的base64字符串
  7. java mybatis 代码生成器_Java MyBatis-Plus 代码生成器
  8. android 预约挂号代码_告别排队!用Python定时自动挂号和快捷查询化验报告
  9. .Net中json序列化与反序列化
  10. VI编辑器的操作按键说明
  11. c combobox绑定mysql数据库_C# ComboBox:组合框控件数据绑定
  12. word 的使用(六)—— 常用功能
  13. 第十一章 Shell常用命令与工具(一)
  14. MSP430G2333下位机乘法运算需要注意的一个问题
  15. MCS:连续随机变量——Erlang分布
  16. 翻译:Swift中的Operations和OperationQueues入门
  17. 143_win10如何删除默认输入法
  18. 【PHP】单词十以内的加法de多种解法
  19. python创建模式对象_【python设计模式-创建型】单例模式
  20. 你想要成为团队里什么样的角色呢?

热门文章

  1. opencv+tesseract完成验证码识别(识别率99.99%)
  2. python如何增加字符串_在python中增加字符的方法
  3. ios 订阅类收据的服务器处理
  4. c语言二重指针做参数,C语言二重指针的运用
  5. 2021-08-22 愿景和范围文档模板样例
  6. 如何配置阿里Maven镜像
  7. uniapp修改顶部导航背景色
  8. java break递归_如何利用Java递归解决“九连环”公式
  9. 传感器和Android平台的开放性结合在一起-传感器之家文章 - 传感器知识博客 - yuyangsensor - 和讯博客
  10. bootstrap网格系统