QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
续前:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) http://blog.csdn.net/johnsuna/article/details/8525038
首先我们来看看二维码的符号字符区域,然后再看看其编码流程。
QRCode的结构:
图9 QRCode的结构
下图为二维码的符号字符区域示意:
图10 版本2-M符号的字符区域分布示意
图11 版本7-H符号的符号字符布置
从上面可知,字符区域分布中均有纠错块与数据块。
再看编码流程:
第1步 数据分析
分析所输入的数据流,确定要进行编码的字符的类型。QR码支持扩充解释,可以对与缺省的字符集不同的数据进行编码。QR码包括几种不同的模式(ECI,数字,字母数字,8位字节,日本汉字,中国汉字,混合,结构链接,FNC1模式等),以便高效的地将不同的字符子集转换为符号字符。必要时可以进行模式之间的转换更高效地将数据转换,以便为二进制串。
选择所需的错误检测和纠正等级。如果用户没有指定所采用的符号版本,则选择与数据相适应的最小的版本。
第2步 数据编码
对于采用的模式按照已定义的规则,将数据字符转换为位流。在当需要进行模式转换时,在新的模式段开始前加入模式指示符进行模式转换。在数据序列后面加入终止符。将产生的位流分为每8位一个码字。必要时加入填充字符以填满按照版本要求的数据码字数。
第3步 纠错编码
按需要将码字序列分块,以便按块生成相应的错误纠正码字,并将其加入到相应的数据码字序列的后面。
第4步 构造最终信息
按相关的规范步骤,在每一块中置入数据和纠错码字,必要时加剩余位。
第5步 在矩阵中布置模块
将寻象图形、分隔符、定位图形、校正图形与码字模块一起放入矩阵。
第6步 掩模
依次将掩模图形用于符号的编码区域。评价结果,并选择其中使深色浅色模块比率最优且使不希望出现的图形最少化的结果。
第7步 格式和版本信息
生成格式和版本信息(如果用到时),形成符号。
从上面的字符布置图和流程可以观察到,如果想将LOGO放到二维码的中间或相应位置(建议偏向图11所示的左边位置一些,属于纠错块的区域),则可以采用以下几种方法:
1、使用无用或无关紧要的字符扩大数据块区域;
2、在相关位置避开关键数据,如无法避开,则至少保证使用其他方式可以纠正该问题引致的错误。
(写作中,未完)
QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)的更多相关文章
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)
原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) 提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别.那么,有没有一 ...
- C#生成带logo的二维码
带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码. 生成的二维码效果如下: 下面直接贴出二维码生成类 QRCode ...
- .NET生成带Logo的二维码
使用ThoughtWorks.QRCode生成,利用这个库来生成带Logo的二维码(就是中间嵌了一个图片的二维码),直接见代码: HttpContext context = HttpContext.C ...
- java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍 我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...
- 生成二维码、条形码、带logo的二维码
Nuget安装ZXing.Net,帮助类: using System; using System.Collections.Generic; using System.Drawing; using Sy ...
- jQuery-qrcode.js 生成带Logo 的二维码
引入文件 jQuery-qrcode.js 地址:https://blog-static.cnblogs.com/files/kitty-blog/jquery-qrcode.js https:// ...
- 涛哥的Python脚本工具箱之生成带Logo的二维码
近期须要在二维码上加Logo,网上没有找到好用的,于是自己用python写了一个. 须要安装qrcode,PIL库 二维码简称 QR Code(Quick Response Code),学名为高速响应 ...
- phpqrcode生成带logo的二维码图片及带文字的二维码图片
<?php require_once "./phpqrcode/phpqrcode.php"; /** * 这样就可以生成二维码了,实际上在png这个方法里还有几个参数需要使 ...
- 建议收藏备用:.net core使用QRCoder生成普通二维码和带Logo的二维码详细使用教程,源码已更新至开源模板
随着互联网越来越生活化,二维码的使用越来越普遍,不论是扫码支付还是扫码关注引流,似乎我们总是离不开二维码,那么很多需要推广的文章或社区想要自己的二维码,那么你是不是需要在网站直接提供给用户呢?很多开发 ...
随机推荐
- 字符串函数(strcpy字符串拷,strcmp字符串比较,strstr字符串查找,strDelChar字符串删除字符,strrev字符串反序,memmove拷贝内存块,strlen字符串长度)
1.strcpy字符串拷贝拷贝pStrSource到pStrDest,并返回pStrDest地址(源和目标位置重叠情况除外) char *strcpy(char *pStrDest, const ch ...
- CCPC2016长春站打铁记
Day0 晚上到的长春.很冷.到了宾馆.放了行李.然后就去吃了点火锅.很好吃.在福建吃的都没有酱.但是回去后有点拉肚子..几个队友也有同样的反应.路过了吉大.拍了一张照片.哎.压力好大. Day1 来 ...
- 指针知识梳理6-const与指针
const 定义的变量为仅仅读变量.在语法层面上通过这个变量去改动内存是不同意的. 可是对于下面代码.就有非常多人绕了: const int *p1; //p1能变.*p1不能变 int cons ...
- 为什么 ["1", "2", "3"].map(parseInt) 返回 [1,NaN,NaN]?
在 javascript 中 ["1","2","3"].map(parseInt) ,2,3] 却是 [1,NaN,NaN]? 我们首先回 ...
- js进阶 9-10 html中如何遍历下拉列表
js进阶 9-10 html中单选框和多选框如何遍历下拉列表 一.总结 一句话总结: 1.select元素的options.length可以获取选择长度,然后用options[i]精确定位到选项,用 ...
- 实践-Task
实践-Task 上篇博文中,我们介绍了Thread和ThreadPool: 多线程异步编程示例和实践-Thread和ThreadPool 本文中我们继续,说一下TPL(Task Parallel Li ...
- Tomcat下部署SpringBoot
SpringBoot默认支持Tomcat7及以上版本(SpringBoot默认支持servlet3.1版本及以上,Tomcat6只支持到servlet2.5) 测试环境:jdk1.8 + tomcat ...
- java序列化框架(protobuf、thrift、kryo、fst、fastjson、Jackson、gson、hessian)性能对比
我们为什么要序列化 举个栗子:下雨天我们要打伞,但是之后我们要把伞折叠起来,方便我们存放.那么运用到我们java中道理是一样的,我们要将数据分解成字节流,以便存储在文件中或在网络上传输,这叫序列 ...
- 关于CORS跨域更细节的思考
权威的资料看MDN,也可以看阮一峰的文章.不过感觉阮一峰对于CORS的描述有问题,简单请求被阮一峰描述为2次浏览器请求了.这个要自己搭个服务器试一下.跨域基本都是根据域名判断的,自己是否要再买个域名呢 ...
- quartz2.x源码分析——启动过程
title: quartz2.x源码分析--启动过程 date: 2017-04-13 14:59:01 categories: quartz tags: [quartz, 源码分析] --- 先简单 ...