我需要知道如何计算 QR 码对齐图案的位置,如中定义ISO/IEC 18004:2000 附录 E 表.
我不明白它是如何计算的。例如,如果您采用版本 16,则使用 {6,26,50,74} 计算位置,点之间的距离为 {20,24,24}。如果点之间的距离 {22,24,22} 分布得更均匀,为什么不是 {6,28,52,74}?
我想知道如何按程序生成它。
虽然规范确实提供了对齐表,但这是一个合理的问题(我发现自己也遇到了这样的问题:-)) - 以程序方式生成位置的可能性有其优点(不易打字的代码、较小的代码占用空间、了解位置的模式/属性)。
我很高兴地报告,是的,存在一个程序(而且它甚至相当简单)。
规范本身说了大部分内容:
[对准图案]在定时图案和符号的相对侧之间尽可能均匀地间隔,任何不均匀的间隔都被容纳在定时图案和符号内部的第一对准图案之间。
即,仅第一坐标和第二坐标之间的间隔可以与其余间隔不同。其余的必须相等。
当然,另一个重要的一点是,为了使 AP 与时序模式一致,间隔必须均匀。
剩下的棘手问题就是如何正确舍入。
无论如何 - 这是打印对齐位置表的代码:
def size_for_version(version):
return 17 + 4 * version
def alignment_coord_list(version):
if version == 1:
return []
divs = 2 + version // 7
size = size_for_version(version)
total_dist = size - 7 - 6
divisor = 2 * (divs - 1)
# Step must be even, for alignment patterns to agree with timing patterns
step = (total_dist + divisor // 2 + 1) // divisor * 2 # Get the rounding right
coords = [6]
for i in range(divs - 2, -1, -1): # divs-2 down to 0, inclusive
coords.append(size - 7 - i * step)
return coords
for version in range(1, 40 + 1): # 1 to 40 inclusive
print("V%d: %s" % (version, alignment_coord_list(version)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)