我开始研究 ISO/IEC 18004 - “二维码规范”。
将数据编码为二维码(生成二维码)时,必须指定以下信息:
numeric
、alphanumeric
、binary
、...)L
、M
、Q
或 H
)我正在寻找一种数学(方程)方法来确定版本需要以指定的模式和纠错级别保存所提供的数据。该标准本身包含一个查找表,该表也可从各种网络资源获得,例如 this 或 this(它们只是查找表)。
来自this very related SO answer的引用:
<块引用>任何用于数据容量的公式都必然是笨拙和无意义的,因为许多决定 QR 码符号结构的参数都是手动选择的,因此实现通常必须诉诸于包括这些非计算值的常量表。
根据我目前对标准的理解,应该可以根据输入数据、模式和 ECC 级别确定所需的数据容量(以及最低版本)。答案甚至表达了最大容量的计算:
<块引用>DataModules = Rows × Columns − ( FinderModules + AlignmentModules + TimingPatternModules ) − ( FormatInformationModules + VersionInformationModules )
UsableDataBits = DataModules − ErrorCorrectionBits
我不明白导致求助于查找表的“尴尬”从何而来?根据我的理解,时序模式等的大小按版本固定。
有人可以进一步解释一下吗?
答案 0 :(得分:1)
zxing 为此提供了一个实现:
/**
* Decides the smallest version of QR code that will contain all of the
provided data.
*
* @throws WriterException if the data cannot fit in any version
*/
private static Version recommendVersion(ErrorCorrectionLevel ecLevel,
Mode mode,
BitArray headerBits,
BitArray dataBits)
Encoder 类提供了确定您正在寻找的最低版本的算法(“数学方法”)。
这个实现是否有任何“尴尬”,我无法回答。