-
二维码
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码标准有各种不同版本;版本信息(位于两个取景器模式附近)简单地识别在特定代码中使用哪一个。
数据单元:每个单独的黑色或白色方块不属于标准特征之一(时序,对齐和其他模式),包含代码中的一些实际数据。 -
Android二维码图片生成和二维码扫描软件的设计
2016-11-24 08:57:37QR Code码,是一种矩阵二维码符号,这里的二维码样式: 这里使用网络框架,github上的依赖,只要使用几句话就能生成一个二维码的图像显示在页面上。一.简要介绍
QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
这里的二维码和书本的条形码是不一样的。这里的二维码样式:
这里使用网络框架,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'
如图所示:
然后点击同步。稍等一下就可以只要他创建的类和方法来操作了。
二.使用
(一)创建二维码代码
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(); }
三.一个简单的使用示例
程序运行后的界面:
点击扫描后,显示扫描界面:
扫描自己生成的二维码可以跳转到百度网络页面,
关闭网页后显示的结果:
可以看到,能都拿到二维码中藏有的字符串信息!
下面是设计的主要步骤
(一)设计布局文件
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:07QR 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个版本尺寸,当尺寸过大后需要有根标准线,不然扫描的时候可能会扫歪。
-
Labview二维码去字母和符号保留数字.vi
2020-12-15 15:07:13在实际产线上,根据协议对接上传产品数据时,不保留产品二维码中的字母符号等内容,以前的处理办法是在已知条码长度的情况下截取字符串,但条码长度不固定的时候就不适用了,所以用正则表达式索引[0~9]数字,将原... -
二维码在纸质旅游地图符号设计中的应用
2020-06-28 05:28:06从符号设计的角度讨论QR码在纸质旅游地图中的应用,采用将QR码与旅游地图符号相结合的专题地图符号设计思路,参照地图符号设计的标准,总结出一种基于视觉变量的二维码旅游地图符号设计方法.研究结果表明:二维码旅游... -
好用的二维码生成工具
2018-02-28 15:29:04二维码生成工具/简单好使/易于上手/,软件采用了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:23QR Code(Quick Response Code)码,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有... -
二维码回车控制符号_特殊预定义和元字符表达式符号使用方法
2021-01-16 04:34:34”→ 点选“设为星标★” 加上星标,就不会找...特殊预定义表达式符号匹配模式 含义 示例[:alnum:]匹配任意一个字母或数字字符,相当于[a-zA-Z0-9] [[:alnum:]][:alpha:]匹配任意一个大小写字母字符,相当于[a-zA-Z]... -
使用Qrcode生产二维码
2017-11-08 21:51:19闲来无聊,试试二维码的生成,使用Qrcode,QR Code码,是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强... -
Java实现带logo的二维码
2018-05-28 10:39:16我们实现的二维码是基于QR Code的标准的,QR Code是由日本Denso公司于1994年研制的一种矩阵二维码符号码,全称是Quick Response Code QR Code:专利公开,支持中文; QR Code与其他二维码相比,具有识读速度快、数... -
如何用.NET生成二维码?
2017-08-01 15:09:00二维码是用某种特定的... 末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。二维码技术已经被广泛应用于公安、外交、军事等部门对各类证件的管理,... -
生成二维码的两种方式
2017-04-26 22:07:00利用qrcode生成二维码,(qrcode矩形二维码符号) 基于jquery的二维码生成插件qrcode,在页面中调用该插件就能生成对应的二维码。qrcode其实是通过使用jQuery实现图形渲染,画图,支持canvas(HTML5)和table两种... -
二维码可以用文本特殊符号的方式来传播吗?
2020-04-02 09:11:25* 但是我一直想知道可不可以用文本特殊符号的方式来传播二维码? * 游戏里面的聊天框不支持发送图片 * 可不可能用文本里面的特殊符号■来表示二维码呢 * 有没有类似的软件哇 * 好让我可以复制到游戏聊天窗口发送.... -
zxing和QRCode 生成解析二维码
2019-04-14 10:35:03QRCode:是有日本Demso公司于1994年研制的一种矩阵二维码符号码 zxing:老美的(个人更喜欢这个) 桌面或Web应用建议采用QRCode,Android应用建议采用zxing 不说废话,直接来 1.QRCode 引入maven (我引入了...