利用qrcode可以非常方便生成二维码,网上介绍也很多了。自己使用过程中发现二维码尺寸不固定,后来发现和携带内容多少有关系,如何计算二维码像素大小?
qr = qrcode.QRCode(
version=10,
error_correction=qrcode.constants.ERROR_CORRECT_Q,
box_size=8,
border=4
)
上面函数参数含义:
version:值为1~40的整数,控制二维码的模块数量(最小值是1,是个21×21的矩阵,每个版本差值为4)。 如果想让程序自动确定,将值设置为 None 并使用 fit 参数即可。
error_correction:控制二维码的错误纠正功能。可取值下列4个常量。
ERROR_CORRECT_L:大约7%或更少的错误能被纠正。
ERROR_CORRECT_M(默认):大约15%或更少的错误能被纠正。
ERRORCORRECTQ:大约25%或者更少的错误会被更正。
ROR_CORRECT_H:大约30%或更少的错误能被纠正。
box_size:控制二维码中每个模块包含的像素数。
border:控制边框(二维码与图片边界的距离)包含的模块数(默认为4,是相关标准规定的最小值)
以上参数解释,网上很多,上面参数解释是从别处摘抄来的。
个人理解,二维码像素尺寸可以通过version、box_size和border三个参数来计算。
1、version控制了二维码中模块的数量,比如version=10,每边的数量是(21 + (10-1)*4)=57,就是57×57的矩阵。
2、边距是以模块数量为单位,比如border=4就是表示4个模块。
3、box_size表示每个模块的像素数,“每边模块数” × box_size 就是二维码的像素尺寸了。公式如下:
(21 + (version - 1) * 4 + border * 2) * box_size
例如version=10,box_size=8,border=4,那么二维码像素尺寸为520*520,计算过程如下:
(21+(10-1)*4+4*2)*8 = 520
如果version设置小于要携带的内容,那么qrcode会自动增大version。如果version固定想携带更多内容就要修改error_correction值,减小冗余。