矩阵中的模块放置
|Last edited: 2023-10-3
在上一步(结构化最终消息)中,交错数据和纠错码字,得到最终的位串。下一步是将它们与所需的功能模式一起放 二维码矩阵中。功能图案是二维码规范所需的二维码的非数据元素,例如二维码矩阵角落的三个搜寻图案。本页说明何时以及如何放置功能图案和数据位。

术语:像素与模块

在此页面上,我将二维码的黑白方块称为模块而不是像素。这是为了区分屏幕上的像素和二维码的黑白方块。例如,版本 1 二维码始终是 21 x 21 个模块,即使它在计算机屏幕上占用 42 x 42 像素或 105x105 像素,依此类推。

函数模式概述

二维码必须包含功能图案。这些是必须放置在二维码的特定区域的形状,以确保二维码扫描仪可以正确识别和定向代码以进行解码。下图给出了功能模块是什么以及它们的位置的示例。
notion image
查找器图案(finder patterns)是左上角、右上角和左下角二维码角落的三个块。
分隔符(separators)是查找器图案旁边的空白区域。
对齐图案(alignment patterns)类似于查找器图案,但较小,并放置在整个代码中。它们用于版本 2 及更大版本,它们的位置取决于 QR 码版本。
定位图案(timing patterns)是连接查找器图案的虚线。
暗模块(dark module)是一个黑色模块,始终放置在左下角的查找器图案旁边。
以下各节更详细地解释了如何定位功能模块。

第 1 步:添加查找器图案

首先,将查找器图案放入矩阵中。查找器图案(如下所示)由一个外部黑色方块(7 个模块 x 7 个模块)、一个内部白色方块(5 个模块 x 5 个模块)和中间的实心黑色方块(3 个模块 x 3 个模块)组成。
notion image
查找器图案被设计为不太可能出现在二维码其他部分中的模式。查找器图案的模块宽度比例为 1:1:3:1:1。二维码扫描仪可以搜索这种明暗模块的比例,以检测二维器图案并正确定位 QR 码以进行解码。
无论使用哪个版本,查找器图案始终放置在 QR 码的左上角、右上角和左下角
为了说明这一点,下图显示了取景器图案的位置。左边是版本 1 二维码,右边是版本 18 二维码。
notion image
notion image
二维码的大小可以用公式计算,其中V是二维码版本。例如,版本 32 是 或 145 个模块乘以 145 个模块。因此,查找器图案的位置可以概括如下:
  • 左上角查找器图案的左上角始终位于 (0,0)。
  • 右上角查找器图案的左上角始终位于([(((V-1)*4)+21) - 7], 0)
  • 左下角查找器图案的左上角始终位于(0,[(((V-1)*4)+21) - 7])

步骤 2:添加分隔符

分隔符是一行白色模块,一个模块宽,放置在查找器图案旁边,以将它们与 QR 码的其余部分分开。分隔符仅放置在接触 QR 码内部的查找器图案的边缘旁边。例如:
notion image
notion image

步骤 3:添加对齐图案

版本 2 及更大的二维码需要具有对齐模式。如下所示的对齐模式由 5 模块 x 5 模块黑色方块、内部 3 模块 x 3 模块白色方块和中间的单个黑色模块组成。
notion image
必须放置对齐模式的位置在对齐模式位置表中定义。这些数字将用作行坐标和列坐标。例如,版本 2 具有数字 6 和 18。这意味着对齐模式的中心模块将放置在(6, 6), (6, 18), (18, 6) 和 (18, 18)处。
对齐图案位置表
但是,在放置查找器图案和分隔符后,必须将对齐模式放入矩阵中,并且对齐模式不得与查找器图案或分隔符重叠。下图显示了版本 2 代码,该代码在上一段中描述为具有以 (6, 6)、(6, 18)、(18, 6) 和 (18, 18) 为中心的对齐模式。但是,如左图所示,以红色突出显示的对齐图案不得放置在矩阵中,因为它们与取景器图案和分隔符重叠。与查找器图案或分隔符重叠的对齐模式只需从矩阵中省略即可。
                                   错误放置
错误放置
                                   正确放置
正确放置
 
为了进一步说明对齐图案的位置,下图显示了版本 8 二维码的对齐图案。对齐图案位置表列出了6、24和42作为版本8的对齐图案位置。这三个数字的所有组合被用作对齐模式的坐标。
notion image

步骤 4:添加定位图案

定位图案是两条线,一条水平,一条垂直,交替的暗模块和亮模块。水平定位图案放置在分隔符之间的二维码的第 6 行。垂直定位图案放置在分隔符之间的 QR 码的第 6 列上。定位图案始终以暗模块开始和结束。对齐图案可能与定位图案重叠,因为它们的亮模块和暗模块始终与定位图案的明暗模块重合,如下图所示。下图显示了不同版本的二维码上的定位图案。
notion image
notion image
notion image

步骤 5:添加暗模块和保留区域

几乎是时候将数据位添加到二维码矩阵中了。但是,在此之前,必须添加暗模块,并且矩阵的某些区域必须保留用于格式和版本位,稍后将添加。

暗模块

如本页前面所述,所有二维码在左下角的查找器图案旁边都有一个深色模块。更具体地说,暗模块始终位于坐标([(4 * V) + 9], 8),其中 V 是二维码的版本。

保留格式信息区域

必须为格式信息区域保留分隔符旁边的模块条,如下所示:
  • 在左上角查找器图案附近,必须在分隔符的下方和右侧保留一个模块条带。
  • 在右上角查找器图案附近,必须在分隔符下方保留一个模块条带。
  • 在左下角查找器图案附近,必须在分隔符的右侧保留一个单模块条带。
下图以蓝色显示保留区域。无论二维码是什么版本,它们始终沿着分隔符放置。
notion image
notion image

保留版本信息区域

二维码版本 7 及更高版本必须包含放置版本信息位的两个区域。这些区域是左下角查找器图案上方的 6x3 块和右上角查找器图案左侧的 3x6 块。下图以蓝色显示保留区域的位置。
notion image
notion image

步骤 6:放置数据位

现在是时候将数据位添加到二维码矩阵中了。位以特定模式放置。

放置方式

数据位从矩阵的右下角开始放置,并在 2 个模块宽的列中向上放置。对 0 使用白色像素,对 1 使用黑色像素。当列到达顶部时,下一个 2 模块列紧邻前一列的左侧开始并继续向下。每当当前列到达矩阵的边缘时,移动到下一个 2 模块列并更改方向。如果遇到功能图案或保留区域,则数据位将放置在下一个未使用的模块中。
下图显示了将数据位放置在二维码中的模式。请注意,当达到垂直定位图案时,下一列将从其左侧开始。
notion image

向上放置

下图显示了列向上移动时放置数据位的顺序。
notion image
下面的示例说明了位在第一个向上列中的位置。
添加的第 1 个像素
添加的第 1 个像素
添加的第 4 个像素
添加的第 4 个像素
添加的第 2 个像素
添加的第 2 个像素
添加的第 5 个像素
添加的第 5 个像素
 
添加的第 3 个像素
添加的第 3 个像素
 

向下放置

下图显示了列向下放置数据位的顺序。
notion image
下面的示例显示放置在向下列中的数据位。
添加的向下的像素 #1
添加的向下的像素 #1
添加的向下的像素 #4
添加的向下的像素 #4
添加的向下的像素 #2
添加的向下的像素 #2
添加的向下的像素 #5
添加的向下的像素 #5
添加的向下的像素 #3
添加的向下的像素 #3
 

跳过功能图案

遇到功能图案时,跳过任何占用的模块,直到到达下一个未使用的模块。
在下图中,对齐图案下方的数据位正在向上列中前进。请注意,该列与对齐模式重叠。
notion image
notion image
达到对齐图案后,只需跳过作为对齐图案一部分的模块并继续向上。
notion image
notion image
notion image
notion image
notion image
然后继续以通常的方式将模块添加到列中。
notion image
notion image
notion image
总之,始终沿列正常进行,跳过功能图案或保留区域使用的任何模块。唯一的例外是垂直定位图案,如下所述。

例外:垂直定位图案

垂直定位图案是此规则的唯一例外。当达到垂直定位图案时,始终从其左侧的下一列开始。任何列都不应与垂直定位图案重叠。
在下面的图片中,前一列(向上)被突出显示。这一栏上面的其他模块被功能图案和保留区占据,所以必须开始下一列,并向下走。
notion image
如下图所示,下一列从垂直定位图案的左侧开始。该列不与垂直定位图案重叠。
notion image
notion image
notion image

下一篇: 数据掩蔽

将数据和纠错位放入矩阵后,二维码规范要求对数据和纠错位应用掩码图案。此步骤的目的是减少矩阵中难以读取的模式的数量。继续下一部分,了解数据掩蔽