精华内容
下载资源
问答
  • 二维码

    千次阅读 2015-03-18 16:10:49
    国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等 中国物品编码中心对几种常用的二维码PDF417、QRCCode、Data ...

    /*

    2014-12-22 create

    */

    国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等

    中国物品编码中心对几种常用的二维码PDF417、QRCCode、Data Matrix、Maxi Code、Code 49、Code 16K、Code One的技术规范进行了翻译和跟踪研究

    二维码的国家标准:二维码网格矩阵码(SJ/T 11349-2006)和二维码紧密矩阵码(SJ/T 11350-2006),从而大大促进了我国具有自主知识产权技术的二维码的研发。

    信息获取(名片、地图、WIFI密码、资料)
    ●网站跳转(跳转到微博、手机网站、网站)
    ●广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
    ●手机电商(用户扫码、手机直接购物下单)
    ●防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
    ●优惠促销(用户扫码,下载电子优惠券,抽奖)
    ●会员管理(用户手机上获取电子会员信息、VIP服务)
    ●手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)

    二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码。

    存储
    编辑

    二维码可以存储各种信息,主要包括:

    《二维码存储的信息》的图片说明
    网址、名片、文本信息、特定代码。
    根据信息的应用方式,又可以分为:
    1、线上应用
    如网址和特定代码,更多的是线上应用。
    2、离线应用
    如文本信息和名片,更多的是线下应用。

    识读设备
    编辑

    A.二维条码的阅读设备依阅读原理的不同可分为:
    (1) 线性CCD和线性图像式阅读器(Linear Imager)
    (2)带光栅的激光阅读器
    (3) 图像式阅读器(Image Reader)
    采用面阵CCD摄像方式将条码图像摄取后进行分析和解码,可阅读一维条码和所有类型的二维条码。

    一般简单表层的应用可将信息内容直接生成QR二维码使用。若作为有商业价值的应用,
    想包含更多资讯内容和延伸扩展服务 开发QR二维码深层应用

    QR二维码表层应用多见于:发票、车票,简单的资讯型应用。
    优点:普通解码软件解码
    缺点:信息不能修改编辑、仅限简单内容、不能交互信息、无加密

    QR二维码深层应用多见于:验证、防伪、追溯、签到、军事、更多能交互信息的商业应用服务上。
    优点:使用专业解码软件、加密机制不被破解、丰富资讯内容、系统管理、可编辑修改、与用户交互信息、更多扩展功能、具商业价值的应用
    缺点:手机应用国内标准未统一,需根据手机系统开发、下载


    QR码与PDF417比较: 


    QR码比PDF417识别速度快,可达到30个/秒,而PDF417为3个/秒;
    QR码可以实现360°全方向旋转识读,PDF417需要在+/-10°的范围内才能被识读;
    QR码表示汉字的效率比PDF417码高20%,QR码使用13bit表示一个汉字,而PDF417使用16bits表示一个汉字;
    QR码数据容量大,信息密度大,最多可表示多达3KB的内容,PDF417最多确只能表示1KB的内容;
    QR码是正方形,PDF417是长方形,同样数据容量、有限的面积的情况下QR码可以表示更多的内容;
    QR码对识读设备要求较低,PDF417当容量比较大时长度也会随之增加,所以就要求识读设备可以读取较长的空间;
    支持QR码开发的工具控件非常多,使用起来非常方便;
    QR码又被称为手机二维码,所以QR码不但支持了传统PC设备上的Windows、Linux等系统,还支持了手机平台的主要系统,例如:Windows Mobile、Symbian OS、等,而PDF417尚未见过类似的应用。

    QR码的应用:

      利用30万像素以上的照相手机,搭配手机内的QR码解码软件,对着QR码一照,解码软件会自动解读此信息,显示于手机屏幕上面。目前也有运用到Webcam的镜头来解码,预计未来所有有镜头的科技产品,都会被导入此QR码的机制。


    此外,QRDOOR、QuickMark提供PC版的QR码解码软件,让没有照相手机的用户也能直接通过PC版QR码解码软件直接截取屏幕上的QR码,以得到相关信息,让一般手机和PC用户也能体验QR码带来的方便性。

    矩阵式

    码制

    二维码
    1.行排式二维条码和矩阵式二维条码。
    2.QR码解码软件  //目前主流使用的方式,QR码又被称为手机二维码
    3.开源C库libdecodeqr-0.9.3.tar.bz2  + 适合在Windows下使用,但需要安装OpenCV,识别率有些低
    识别率没法看了,基本没用,虽然二维码是日本开始的,这个算法也是日本来的。opencv也不能移植到dsp上,还是zbar比这个好多了
    在Android上比较著名的解码库是ZXing,
    介绍iPhone上的一个解码库ZBar,两个库比较了一下,ZXing对于解码比较短的条码,
    二维码有优势,但如果条码很长的话,还是ZBar比较好,我特意拿快递单上的条码进行扫描,ZXing识别不了
    sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev
    http://www.linuxidc.com/Linux/2012-09/70158.htm


    http://www.baidu.com/link?url=aluY9AYWhK06LmXCu8RBO2CXwGiD5pdDRCmqZH_AvzJPZlH9_uzy65R9urVcFOSr
    Psytec QR Code(编码解码软件)V1.0 汉化版软件下载 - 绿色先锋
    http://www.greenxf.com/soft/35930.html


    QR码扫描和解码工具


    二维码及其识别技术
    http://www.cnblogs.com/heiyue/p/3571841.html

    展开全文
  • 关于二维码

    2019-07-10 08:14:35
    二维码背景和意义 二维码作为一种全新的信息存储、传递和识别技术,自诞生之日起就得到了世界上许多国家的关注。它是当代人获取信息重要方式,特别...国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技...

    二维码背景和意义
    二维码作为一种全新的信息存储、传递和识别技术,自诞生之日起就得到了世界上许多国家的关注。它是当代人获取信息重要方式,特别是手持设备上信息的获取。随着时代的发展,它将渗透到我们日常生活的方方面面。现代社会, 人人都接触到二维码,这正反映了时代文化的变迁。充分利用二维码这一技术将会给我们的生活带来极大的便利。
    研究现状
    国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,在二维码标准化研究方面,国际自动识别制造商协会(AIM)、美国标准化协会(ANSI)已完成了PDF417、QR Code、Code 49、Code 16K、Code One等码制的符号标准。我国对二维码技术的研究相对落后,大约始于1994年。
    应用前景
    信息获取(名片、地图、WIFI密码、资料)
    网站跳转(跳转到微博、手机网站、网站)
    广告推送(浏览商家推送的视频、音频广告)
    手机电商(手机直接购物下单)
    优惠促销(下载电子优惠券,抽奖)
    会员管理(获取电子会员信息、VIP服务)
    手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)
    研究重点
    我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中。其中QR码具有数据容量大,编码范围广,可靠性高,成本低,纠错力强等优点,现在常见的二维码都是以QR码作为编码的码制。
    QR码理论

    QR码由两大部分组成:编码区格式和功能图形区。
    编码区格式包括了由格式信息、版本信息以及数据信息和 Rs生成的纠错码字,其中大部分是数据信息和纠错码字;
    功能图形区是指符号中用于符号定位与特征识别的特定图形,由位置探测图形、分隔符、定位图形以及校正图形组成。
    QR码符号区域被空白区包围, 空白区不打印任何信息,四周空白区的宽度为四个模块的究度。

    QR码编码

    ●数据分析:区分数字,字母汉字等,对不同数据模式进行高效编码。
    ●数据编码:根据数据编码模式将数据字符转化为二进制位流,位流分为每8位一个码字,必要时需加入填充。
    ●纠错编码:将码字序列分块,生成相应的纠错码字。一并加入对应数据码字后面。采用Reed.Solomom错误控制码实现纠错。
    ●编码构造:将纠错码字添加到数据码字后面形成最终位流序列。
    ●模块构造:将寻像图形,分隔符,定位图形,校正图形,码字图统一编 入同一矩阵,每8位码字按2个模块宽度从右下角开始进行蛇形排列。
    ●加入掩膜:避免出现相似区域,对符号进行异或操作后计分,选择得分最低图形。
    ●版本与格式:格式信息右5个数据位和10个纠错位组成与掩模图形进行异或运算后填入相应位置。

    使用方式
    集成默认的二维码扫描页面
    在module的build.gradle中执行compile操作

    compile 'cn.yipianfengye.android:zxing-library:2.2'
    

    在demo Application中执行初始化操作

    @Override
        	public void onCreate() {
            	super.onCreate();
           		ZXingLibrary.initDisplayOpinion(this);
        	}
    

    在代码中执行打开扫描二维码界面操作

    /**
     * 打开默认二维码扫描界面
     */
        button1.setOnClickListener(new View.OnClickListener() {
        @Override
    public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this,CaptureActivity.class);
        	startActivityForResult(intent, REQUEST_CODE);
     	}
     });
    这里的REQUEST_CODE是我们定义的int型常量。
    在Activity的onActivityResult方法中接收扫描结果
    
    
      /**
    
      * 处理二维码扫描结果
    
        */
        if (requestCode == REQUEST_CODE) {
        //处理扫描结果(在界面上显示)
        If (null != data) {
        Bundle bundle = data.getExtras();
        if (bundle == null) {
        return;
        }
         	If (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
        String result = bundle.getString(CodeUtils.RESULT_STRING);
         		Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
         	} else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
         		Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
        }
        }
        }
    

    集成对二维码图片的解析功能
    调用系统API打开图库

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("image/*");
    startActivityForResult(intent, REQUEST_IMAGE);
    

    在Activity的onActivityResult方法中获取用户选中的图片并调用二维码图片解析API

    if (requestCode == REQUEST_IMAGE) {
    if (data != null) {
        	Uri uri = data.getData();
            ContentResolver cr = getContentResolver();
            try {
            	Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片
    
                CodeUtils.analyzeBitmap(mBitmap, new CodeUtils.AnalyzeCallback() {
                @Override
                public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
                	Toast.makeText(MainActivity.this, "解析结果:" + result, 	Toast.LENGTH_LONG).show();
                }
                @Override
                	public void onAnalyzeFailed() {
                    Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                            }
                        });
                 	if (mBitmap != null) {
                 		mBitmap.recycle();
                  	}
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    

    生成二维码图片
    生成带Logo的二维码图片:

    /**
             * 生成二维码图片
             */
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String textContent = editText.getText().toString();
                    if (TextUtils.isEmpty(textContent)) {
                        Toast.makeText(ThreeActivity.this, "您的输入为空!", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    editText.setText("");
                    mBitmap = CodeUtils.createImage(textContent, 400, 400, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
                    imageView.setImageBitmap(mBitmap);
                }
            });
    

    生成不带logo的二维码图片

    /**
      * 生成不带logo的二维码图片
     */
           button1.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   String textContent = editText.getText().toString();
                   if (TextUtils.isEmpty(textContent)) {
                       Toast.makeText(ThreeActivity.this, "您的输入为空!", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    editText.setText("");
                    mBitmap = CodeUtils.createImage(textContent, 400, 400, null);
                    imageView.setImageBitmap(mBitmap);
                }
            });
    

    支持控制闪光灯

    /**
     * 打开闪光灯
    */
    CodeUtils.isLightEnable(true);
    
    /**
     * 关闭闪光灯
    */
     CodeUtils.isLightEnable(false);
    

    二维码的生成原理
    在这里插入图片描述
    用特定的集合图形按编排规律在二维方向上发布,采用黑白相间的图形来记录数据符号信息,用数字”0”和”1”作为代码,利用计算机内部逻辑使计算机识别,同时使用若干个与二进制相对应的几何形体表示文字数值信息,白色块表示的就是二进制的”0”,黑块就是”1”.

    在QR码上不同的区域则表示着不同的信息
    安静区域:空白边框,可以将代码与其他打印信息隔离(例如,在脏信封上,报纸的黑白打印或污迹产品包装上)。
    Finder模式:三个角落中的大黑色和白色方块可以很容易地确认这是一个QR码。由于它们只有三个,所以很明显代码的哪个方向以及它指向的角度(除非代码在某种程度上被部分遮挡或损坏)。
    对齐模式:这确保代码可以被破译,即使它是扭曲的(以某个角度查看,打印在曲面上,等等)。
    定时模式:在三个取景器模式之间水平和垂直地运行,由交替的黑色和白色方块组成。时序模式可以轻松识别QR码中的各个数据单元,在代码损坏或失真时尤其有用。
    版本信息:QR码标准有各种不同版本;版本信息(位于两个取景器模式附近)简单地识别在特定代码中使用哪一个。
    数据单元:每个单独的黑色或白色方块不属于标准特征之一(时序,对齐和其他模式),包含代码中的一些实际数据。

    展开全文
  • QR Code码,是一种矩阵二维码符号,这里的二维码样式: 这里使用网络框架,github上的依赖,只要使用几句话就能生成一个二维码的图像显示在页面上。

    一.简要介绍

           QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
           这里的二维码和书本的条形码是不一样的。

    这里的二维码样式:

    e1
    这里使用网络框架,github上的依赖,只要使用几句话就能生成一个二维码的图像显示在页面上,并且使用他做好的其他类还能扫描二维码,进行自己的操作。

    二.配置环境

    依赖语句:
    compile 'com.google.zxing:core:3.2.1'
    compile 'cn.bingoogolapple:bga-qrcodecore:1.1.4@aar'
    compile 'cn.bingoogolapple:bga-zxing:1.1.4@aar'
    

    如图所示:
    e2

    然后点击同步。稍等一下就可以只要他创建的类和方法来操作了。

    二.使用

    (一)创建二维码代码

    Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode("https://www.baidu.com", 400);
    
    第一个参数是一个任意字符串,第二个参数是产生的BitMap图片对象的大小,创建bitMap对象后就可以把它放在我们页面的ImageView中显示。

    一般使用时的代码块:

    /**
     * 因为产生二维码是耗时操作所以要在子线程中操作
     */
    private void newCodeImage() {
        //开启线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                final Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode("https://www.baidu.com", 400);
                //把产生的Bitmap赋值到ImageView中,但是要在主线程中运行
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        iv.setImageBitmap(bitmap);
                    }
                });
    
            }
        }).start();
    }

    (二)扫描二维码

    1.创建Xml文件代码,用来显示扫描框ZXingView

    <?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <cn.bingoogolapple.qrcode.zxing.ZXingView
            android:id="@+id/zxingview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:qrcv_animTime="1000"
            app:qrcv_borderColor="@android:color/white"
            app:qrcv_borderSize="1dp"
            app:qrcv_cornerColor="@color/colorPrimaryDark"
            app:qrcv_cornerLength="20dp"
            app:qrcv_cornerSize="3dp"
            app:qrcv_maskColor="#33FFFFFF"
            app:qrcv_rectWidth="200dp"
            app:qrcv_scanLineColor="@color/colorPrimaryDark"
            app:qrcv_scanLineSize="1dp"
            app:qrcv_topOffset="90dp" />
    </LinearLayout>

    2.扫描的执行主要语句

    //定义显示能扫描二维码的摄像头的View-->ZXingView,实例化
    ZXingView zXingView = (ZXingView) findViewById(R.id.zxingview);
    //设置摄像头的监事件,来监听扫描成功和失败结果
    zXingView.setDelegate(this);//让本类对象实现监听
    
    //开启摄像头的扫描功能
    zXingView.startCamera();
    //开始扫描
    zXingView.startSpot();
    
    /**
     * 扫描二维码成功后返回一个字符串的回调方法
     */
    @Override
    public void onScanQRCodeSuccess(String result) {
        //做相应的数据处理。。。
    
        //停止扫描
        zXingView.stopCamera();
        //关闭页面
        finish();
    }
    
    /**
     * 扫描二维码失败后的回调方法
     */
    @Override
    public void onScanQRCodeOpenCameraError() {
        Toast.makeText(this, "不能识别到二维码", Toast.LENGTH_SHORT).show();
    
    }

    三.一个简单的使用示例

    程序运行后的界面:
    e3
    点击扫描后,显示扫描界面:
    e5
    扫描自己生成的二维码可以跳转到百度网络页面,
    关闭网页后显示的结果:
    e4

    可以看到,能都拿到二维码中藏有的字符串信息!

    下面是设计的主要步骤

    (一)设计布局文件

    1.activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="check"
            android:text="去扫描秒二维码" />
    
        <ImageView
            android:id="@+id/main_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher" />
    
        <TextView
            android:id="@+id/main_tv_result"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="扫描后返回的结果!" />
    </LinearLayout>

    2.设计显示扫描框的界面

    <?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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <cn.bingoogolapple.qrcode.zxing.ZXingView
            android:id="@+id/zxingview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:qrcv_animTime="1000"
            app:qrcv_borderColor="@android:color/white"
            app:qrcv_borderSize="1dp"
            app:qrcv_cornerColor="@color/colorPrimaryDark"
            app:qrcv_cornerLength="20dp"
            app:qrcv_cornerSize="3dp"
            app:qrcv_maskColor="#33FFFFFF"
            app:qrcv_rectWidth="200dp"
            app:qrcv_scanLineColor="@color/colorPrimaryDark"
            app:qrcv_scanLineSize="1dp"
            app:qrcv_topOffset="90dp" />
    </LinearLayout>

    (二)设计主页面的代码

    package com.lwz.qr_code;
    
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import cn.bingoogolapple.qrcode.zxing.QRCodeEncoder;
    
    public class MainActivity extends AppCompatActivity {
    
        //定义一个显示二维码的图形
        ImageView iv;
        TextView textView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //实例化
            iv = (ImageView) findViewById(R.id.main_iv);
            textView = (TextView) findViewById(R.id.main_tv_result);
            newCodeImage();
        }
    
        /**
         * 因为产生二维码是耗时操作所以要在子线程中操作
         */
        private void newCodeImage() {
            //开启线程
            new Thread(new Runnable() {
                @Override
                public void run() {
                    final Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode("https://www.baidu.com", 400);
                    //把产生的Bitmap赋值到ImageView中,但是要在主线程中运行
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            iv.setImageBitmap(bitmap);
                        }
                    });
    
                }
            }).start();
        }
    
    
        /***
         * 扫描二维码
         * 需要操作摄像头,加权限
         * 需要跳转到另一个页面
         */
        public void check(View view) {
            startActivityForResult(new Intent(this, Scanner.class), 1);
        }
    
        /**
         * 结果码的返回,扫描完成后,把扫描到的信息显示在页面上
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == 2) {
                String result = data.getStringExtra("result");
                textView.setText(result);
    
                //在实际运用中一般都是判断扫描得到的内容再做相应的行为
                if (result.startsWith("http://")||result.startsWith("https://")) {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(result));
                    startActivity(intent);
                } else if (result.startsWith("firend://")) {
                    //app加好友的方法
                    //调用服务器接口
                } else if (result.startsWith("pay://")) {
                    //启动支付宝
                }
            }
        }
    }

    (三)设计显示扫描框的Activity的页面代码

    package com.lwz.qr_code;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.Toast;
    
    import cn.bingoogolapple.qrcode.core.QRCodeView;
    import cn.bingoogolapple.qrcode.zxing.ZXingView;
    
    /**
     * 这是扫描二维码页面的类
     * 里面要有一个摄像头的View
     * 扫描完毕后还要,返回数据
     */
    
    public class Scanner extends Activity implements QRCodeView.Delegate {
    
        //定义显示能扫描二维码的摄像头的View-->ZXingView
        ZXingView zXingView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_scanner);
            //实例化
            zXingView = (ZXingView) findViewById(R.id.zxingview);
            //设置摄像头的监事件,来监听扫描成功和失败结果
            zXingView.setDelegate(this);
    
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            //开启摄像头的扫描功能
            zXingView.startCamera();
            //开始扫描
            zXingView.startSpot();
        }
    
        /**
         * 扫描二维码成功后返回一个字符串的回调方法
         */
        @Override
        public void onScanQRCodeSuccess(String result) {
            Intent data=getIntent();
            data.putExtra("result",result);
            setResult(2,data);
            //停止扫描
            zXingView.stopCamera();
            //关闭页面
            finish();
        }
    
        /**
         * 扫描二维码失败后的回调方法
         */
        @Override
        public void onScanQRCodeOpenCameraError() {
            Toast.makeText(this, "不能识别到二维码", Toast.LENGTH_SHORT).show();
        }
    
    }

    (四)在AndroidManifest添加权限

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    (五)在AndroidManifest注册扫描框的Activity页面

    <activity android:name=".Scanner" />

           弄完就可以实现一个简单的二维码生成和扫描的功能的软件了。这里能实现跳转到网页(如果二维码的数据是网页的字符串),如果二维码的信息数据是普通的字符串也能获取到。支付功能和添加好友等其他的功能代码暂时没有去实现,这个需要很多其他软件提供的信息。

           这里提供一个github的源码文件的地址:
    https://github.com/bingoogolapple/BGAQRCode-Android
           里面还还有二维码生成的其他各种处理。而且还有实时跟新的依赖数据,里面也有简单的使用步骤。

    展开全文
  • 二维码生成库QrCode

    2020-11-24 11:18:07
    QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
  • 二维码的识别

    千次阅读 2019-05-20 19:36:43
    定位图形确定二维码符号中模块的坐标,二维码中的模块都是固定的,包括校正图形,版本信息,数据和纠错码。分隔符呢,就是将探测图形与二维码信息图像分开。 2、灰度化二维码信息像素:手机拍到的图像都是彩色的,...

    1、定位图形:首先寻找探测图形,就是二维码上的三个方块。这三个方块的作用就是不管在哪个方向扫描图形,都可以扫到,不信可以将手机翻转测试一下。在通过二维码上的定位图形和分隔符确定二维码信息的图像。定位图形确定二维码符号中模块的坐标,二维码中的模块都是固定的,包括校正图形,版本信息,数据和纠错码。分隔符呢,就是将探测图形与二维码信息图像分开。

    2、灰度化二维码信息像素:手机拍到的图像都是彩色的,所以拍摄到二维码也不列外,它也是彩色的,只不过除了黑白,其他颜色非常浅而已。灰度化是指通过颜色的深浅来识别二维码,就是说颜色深的按深灰处理,浅色的按浅灰处理,去掉其他颜色。
    3、去掉二维码信息像素的噪点:相机的传感器在把光线作为接收信号和输出过程产生的粗糙像素,这些粗糙的像素是照片中不应该出现的干扰因素。噪点就是指这些粗糙的像素。

    4、二值化二维码信息像素:二值化是说将图像上像素灰度值设置为0或者255,也就是变成只有黑白两种颜色。第一步已经灰度化变成只有深灰和浅灰两种颜色,现在二值化是将深灰变成黑色,浅灰变成白色。为什么变成黑白色呢。因为二维码图像其实是由二进制的0或者1组成,0代表白色,1代表黑色。二维码在二值化时会将二维码图像变成只有黑白色的条码,然后根据解析公式什么的(因为像素是0-255之间,要全部转变成0或者255,估计得经过一些计算,然后0就是0,255变为1)转化成二进制信息。

    5、二维码译码和纠错:将得到的二进制信息进行译码和纠错。得到的二进制信息是版本格式信息、数据和纠错码经过一定的编码方式生成的,所以译码是对版本格式信息,数据和纠错码进行解码和对比。纠错是和译码同时进行的,将数据进行纠错。得到数据

    加粗样式版本信息:version1(21*21),version2,…,version40,一共40个版本。版本代表每行有多少模块,每一个版本比前一个版本增加4个码元,计算公式为(n-1)*4+21,每个码元存储一个二进制0或者 1。1代表黑色,0表示白色。比如,version1表示每一行有21个码元。

    2、格式信息:存储容错级别L(7%),M(15%),Q(25%),R(35%)。容错:允许存储的二维码信息出现重复部分,级别越高,重复信息所占比例越高。目的:即使二维码被图标遮住一部分,一样可以获取全部二维码内容。有图片的二维码, 图片不算二维码的一部分,它遮住一部分码元,但还是可以扫描到所有内容。

    3、码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误,就是说当码元被图片遮住,可以通过纠错码字来找回)。

    4、位置探测图形、位置探测图形分隔符、定位图形,校正图形:用于对二维码的定位。位置探测图形用于标记矩形大小,3个图形确定一个矩形。定位符是因为二维码有40个版本尺寸,当尺寸过大后需要有根标准线,不然扫描的时候可能会扫歪。

    展开全文
  • 在实际产线上,根据协议对接上传产品数据时,不保留产品二维码中的字母符号等内容,以前的处理办法是在已知条码长度的情况下截取字符串,但条码长度不固定的时候就不适用了,所以用正则表达式索引[0~9]数字,将原...
  • 符号设计的角度讨论QR码在纸质旅游地图中的应用,采用将QR码与旅游地图符号相结合的专题地图符号设计思路,参照地图符号设计的标准,总结出一种基于视觉变量的二维码旅游地图符号设计方法.研究结果表明:二维码旅游...
  • 二维码生成工具/简单好使/易于上手/,软件采用了QR编码,QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息...
  • 二维码通讯录的实现

    千次阅读 2017-12-04 22:30:01
    二维码通讯录的实现 功能介绍:根据用户的填入的相关信息生成二维码,手机微信...1,生成二维码的实现 二维码的实现借助了Qrcode,Qrcode是日本开发出来的,是由Denso公司于1994年9月份研发的一种矩阵二维码符号
  • .NET生成二维码

    2016-08-31 10:08:00
    二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种...
  • 基于java生成二维码

    2017-10-07 11:11:00
    二维码的概念 二维条码/二维码是用某种特定的集合...在通用商品条码的应用系统中,最先采用的是一维码,国外对二维码技术的研究始于20世纪80年代,在二维码符号表示技术研究方面,已研制出多种码制,常见的有PDF4...
  • QR Code二维码识别

    2019-12-06 21:28:23
    QR Code(Quick Response Code)码,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有...
  • ”→ 点选“设为星标★” 加上星标,就不会找...特殊预定义表达式符号匹配模式 含义 示例[:alnum:]匹配任意一个字母或数字字符,相当于[a-zA-Z0-9] [[:alnum:]][:alpha:]匹配任意一个大小写字母字符,相当于[a-zA-Z]...
  • 使用Qrcode生产二维码

    2017-11-08 21:51:19
    闲来无聊,试试二维码的生成,使用Qrcode,QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强...
  • 我们实现的二维码是基于QR Code的标准的,QR Code是由日本Denso公司于1994年研制的一种矩阵二维码符号码,全称是Quick Response Code QR Code:专利公开,支持中文; QR Code与其他二维码相比,具有识读速度快、数...
  • 二维码是用某种特定的... 末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。二维码技术已经被广泛应用于公安、外交、军事等部门对各类证件的管理,...
  • 利用qrcode生成二维码,(qrcode矩形二维码符号)  基于jquery的二维码生成插件qrcode,在页面中调用该插件就能生成对应的二维码。qrcode其实是通过使用jQuery实现图形渲染,画图,支持canvas(HTML5)和table两种...
  • * 但是我一直想知道可不可以用文本特殊符号的方式来传播二维码? * 游戏里面的聊天框不支持发送图片 * 可不可能用文本里面的特殊符号■来表示二维码呢 * 有没有类似的软件哇 * 好让我可以复制到游戏聊天窗口发送....
  • QRCode:是有日本Demso公司于1994年研制的一种矩阵二维码符号码 zxing:老美的(个人更喜欢这个) 桌面或Web应用建议采用QRCode,Android应用建议采用zxing 不说废话,直接来 1.QRCode 引入maven (我引入了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 595
精华内容 238
关键字:

二维码符号