zoukankan      html  css  js  c++  java
  • QR 码

    http://www.denso-wave.com/qrcode/qrgene1-e.html

    本文内容

    • QR 码概述
    •     QR 码系统设置
    •     QR 码大小的决定因素
    • 符号版本
    •     纠错率
    •     纠错率特性
    •     符号版本确定的示例
    • 模块大小
    •     设置模块大小
    •     打印机头密度与模块大小
    •     扫描仪因素
    • QR 码区域
    •     安全边距
    •     计算 QR 码区域的示例
    •     QR 码区域过大

    QR 码概述

    QR 码系统设置

    QR 码系统与 QR 码打印机(或 QR 码生成软件)和 QR 码扫描仪一起使用。

    但无论是打印机,还是扫描仪,都不能自动生成可以被正确读取的 QR 码。生成可以适当读取的 QR 码,QR 码的大小很重要。

    QR 码大小的决定因素

    QR 码的大小是由基于数据大小、字符类型、错误正确性级别来确定符号版本,以及基于打印机打印或扫描的性能来设置模块大小。

    qrsizefig

    图 1 QR 码大小的决定因素

    符号版本

    符号版本

    QR 码的符号版本从版本 1 到版本 40.每个版本有不同的模块配置或模块数量。模块是构成 QR 码的黑白块。

    “模块配置”是指一个符号中包含模块的数量,从版本 1 的(21 × 21 模块数)开始,到版本 40 的(177 × 177 )。每个更高的版本由每个边额外的4个模块组成。

    qrversion

    图 2 符号版本

    根据数据数量,字符类型和错误正确性等级,每个 QR 码符号版本都有其最大的数据容量。检查每个版本的最大数据容量。参看 http://www.denso-wave.com/qrcode/vertable1-e.html

    随着数据量的增加,QR 码需要更多的模块。

    纠错率

    QR 码具有纠错能力,以便在 QR 码脏了,或是被损坏后,来恢复数据。根据操作环境,用户可以选择 4 个等级。更高的等级会提高纠错能力,但是也增加了 QR 码的大小。

    表 1 QR 码纠错率

    表 1 QR 码纠错率

    整个 codewords 的数据恢复比率。codewords 是构成数据区的一个单元。一个 codewords 等于 8 比特。

    若选择纠错率,需要考虑各种因素,如操作环境和 QR 码的大小。

    在 QR 码码很容易被弄脏的地方,应该选择 Q 级别或 M 级别,而在比较干净,且数据量很大时,可以选择 L 级别。最常用的是 M 级别。

    纠错率特性

    QR 码纠错率是由增加一个 Reed-Solomon 码到原始数据。

    纠错能力依赖被修正的数据量。例如,若有 100 个 codeword,其中 50 个需要修正,那么,就需要 100 个 Reed-Solomon 码,也就是 codeword 的两倍。

    此时,codeword 的总数是 200 个,其中 50 个需要修正。因此,错误正确性比率是 50/200=25%。这是 L 级别。

    在上面的例子,也可以看作是 50%。因此,QR 码表示 codeword 总数与错误的比率。

    Reed-Solomon 码是一个数字式纠错,用于音乐 CD 等。

    符号版本确定的示例

    若有 100 位的数值数据,则设置为 "Numeric" 类型。接下来,指定纠错级别。然后,从版本和最大数据量获得版本(列为数据类型,行为纠错级别,两个交值就是最大数据量)。该值必须大等于 100,尽可能接近 100。若纠错级别为 M,则代码大小是 29x29 的模块,这相当于版本 3。

    模块大小

    设置模块大小

    一旦确定了符号版本,QR 码符号的实际大小就依赖于要打印模块的毫米大小(组成 QR 码的一个方块区域)。

    3

    图 3 版本 1 的 QR Code(21 × 21 模块):左边的模块大小为 0.5 平方毫米。右边为 1 平方毫米

    较大的模块更稳定,更容易用 QR 码扫描仪读取。另外,QR 码符号大小变大,就需要更大的打印面积。

    因此,考虑所有相关因素后,需要确定每个应用程序的模块大小。建议 QR 码符号尽可能在可用的打印区域内打印。

    打印机头密度与模块大小

    标准热敏捷转换/直接打印机的模块大小取决于打印机头点的数量。

    例如,若打印头密度为 300 dpi,且每个模块由 5 个点组成,则模块大小为 0.42 平方毫米。增加点的数量能提高打印质量,并且使操作更稳定。

    建议每个模块由 4 个或更多点组成会获得更稳定的操作。

    图 4 个点的模块 表 2 打印机和模块大小关系

    图 4 个点的模块(左)

    表 2 打印机和模块大小关系(右)

    扫描仪因素

    每个扫描仪都有自己的可读模块大小限制。扫描仪分辨率表示它的限制。

    例如,若用一个 600 dpi、4 针的打印机打印一个 QR 码,则模块大小为 0.17 毫米。一个至少小于 0.17 毫米的扫描仪分辨率才能读取符号。

    若超过扫描仪的读取限制,那么,用一个高密度的打印机在有限的区域打印小的是没用的。

    在确定要使用的模块大小前,考虑采用什么样的扫描仪。

    QR 码区域

    安全边距

    当确定了符号版本和模块大小,也就确定了 QR 码符号的大小。QR 码符号区域需要一个在其周围的边距。

    边距是一个 QR 码周围的空白、干净区域,没有任何东西可以打印。QR 码在其所有的变需要一个 4 个模块宽的边距。

    qrmargin

    图 5 在一个 QR 码的四周要求 4 个模块宽度的边距

    计算 QR 码区域的示例

    下面是计算含边距的 QR 码包区域的示例。例如,生成 50 个字母数字字符的 QR 码:

    1. 指定纠错率为 M 级别。
    2. 版本和最大数据量获得版本(列为 Alfanumeric,行为 M,两个交值就是最大数据量)。版本 3 可以存储 50 个或更多字符。版本 2 在 M 级别时只能存储 38 个字符。
    3. 使用 400 dpi 分辨率的打印机。当使用 4 针打印时,是 0.254 mm(25.4 mm/inch ÷ 400 dpi × 4 dots/module = 0.254 mm/module)
    4. 版本 3 为 29 模块,因此,QR 码的大小为 29 modules × 0.254 mm/module = 7.366 mm。
    5. 安全 4 模块边距为 7.366mm + 0.254mm/module × 8 modules =9.398mm。

    也就是,QR 码区域为 9.398 平方毫米。

    QR 码区域过大

    若 QR 码区域过大,不适合打印,可以考虑下面三个方法:

    1. 减少符号版本。
    2. 使模块尺寸小点。
    3. 分割 QR 码。

    下载 Demo

  • 相关阅读:
    发布TrajStat 1.4.4
    Dubbo原理解析-监控
    systemctl 命令完全指南
    Spring Boot 性能优化
    试用阿里云RDS的MySQL压缩存储引擎TokuDB
    编译安装 Centos 7 x64 + tengine.2.0.3 (实测+笔记)
    使用ssh公钥实现免密码登录
    Spring Boot Admin Reference Guide
    zookeeper集群搭建设置
    dubbo服务者配置说明
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2514040.html
Copyright © 2011-2022 走看看