编程就像做爱,你得为一个错误提供一辈子的支持
之前见到的二维码都是这样的,很是枯燥,我们需要一些个性化的东西
今天就给大家介绍一个库专门做二维码的,它叫qrcode,你可以使用pip安装它
这个库使用起来非常简单,几行代码就能实现个性化的二维码生成
qr=qrcode.QRCode(
version=2,
error_correction=qrcode.ERROR_CORRECT_Q,
box_size=4,
border=4
)
第一个参数 version 是控制宽高的,二维码都是正方形的,没法单独控制一边,范围在1-40,因为二维码都是承载少量的信息,不可能放进去一篇文章,你可以放一个网址,放一句话这样,他的计算方式是这样的(v-1)*4+21 v就是你传的参数
第二个参数 error_coooection 是控制容错率的,二维码的容错率越高识别起来越快,为什么要设置容错率呢,比如说一个二维码残缺了一个小角但是你还是可以扫出来信息,这便是容错率的作用,这里提供四种容错率qrcode.ERROR_CORRECT_L,qrcode.ERROR_CORRECT_M,qrcode.ERROR_CORRECT_Q,qrcode.ERROR_CORRECT_H,分别代表7%,15%,25%,30%
第三个参数 box_size 是说一个二维码里面一个小方块占几个像素点,控制图像分辨率的
第四个参数 border 作用和名字一样,控制边距的,就是留白,二维码最外圈都有一圈留白嘛
这只是设置了一个二维码的样式,接下来调用这两个方法你便可以填充数据和生成了
qr.add_data("http://www.moonboy.club")
qr.make(fit=True)
注意add_data的数据不要太长,要和之前设置的version相适应,你可能找不准两者的关系,没关系,在生成的时候设置参数fit为True便是为了让version和数据长度相适应的,如果你不设置可能你的数据便显示不全
这样的话二维码便生成出来了,但是我们想要保存为图片以便查看怎么办呢?
img=qr.make_image(fill_color="green", back_color="yellow")
img.save("qrcode_color.png")
调用make_image方法可以生成图像,最后指定文件路径,文件名保存一下就好了
在这里我们还可以控制二维码的颜色,fill_color指的是二维码上那些小方块的颜色,back_color指的是二维码的背景颜色,看图
你觉得这没啥个性的,起码再贴个图,那我们就再贴个图
logo=Image.open("resources/love.jpg")
qrcode_img_w,qrcode_img_h=qrcode_img.size
fator=4
size_w=int(qrcode_img_w/fator)
size_h=int(qrcode_img_h/fator)
logo_w,logo_h=logo.size
if logo_w>size_w:
logo_w=size_w
if logo_h>size_h:
logo_h=size_h
logo=logo.resize((logo_w,logo_h),Image.ANTIALIAS)
w=int((qrcode_img_w-logo_w)/2)
h=int((qrcode_img_h-logo_h)/2)
qrcode_img.paste(logo,(w,h),None)
qrcode_img.save("qrcode_img.png")
我们使用PIL库的open方法打开一张图片,然后先得到刚才生成二维码的宽高
然后我们来决定贴的这张图占二维码多大的比例,注意不要太大,不然就扫不出来了,毕竟容错率最高是30%,我这里长宽比是4:1,也就是说贴的图占比二维码1/16
因为你选用的图片它不一定多大,我还需要把它尺寸改一改,我这里写的是长宽不能超过二维码的1/4,并没有按比例缩小,如果你想做的更精致可以写一个按比例缩小的操作,调用resize方法改变宽高,后面传的Image.ANTIALIAS是一个滤镜,普通调用Image.resize方法会对图像造成一些破损,传入这个滤镜之后会好很多,不过速度也会慢一大截,大概是不传的1/8速度
然后我们计算出添加的这张图放置在二维码中的位置,(二维码宽-贴图宽)/2 可以得到横坐标,纵坐标求法一样,很简单,不懂就画个图
然后我们调用Image.paste方法,传入贴图和位置,最后保存
你觉得静态二维码见惯了,还是不够骚,那来试试这个,这有一个更简单更强大的库 MyQR,其实就是刚才那个库的封装
words="www.moonboy.club"
picture="resources/dongtu.gif"
output_name="qrcode_gif.gif"
try:
version,level,qr_name=myqr.run(
words,
version=1,
level="H",
picture=picture,
colorized=True,
contrast=1.0,
brightness=2.0,
save_name=output_name,
save_dir=os.getcwd()
)
except:
raise
参数 | 含义 | 详细 |
---|---|---|
words | 二维码内容 | str,输入链接或者句子作为参数 |
version | 边长 | int,控制边长,范围是1到40,数字越大边长越大,默认边长是取决于你输入的信息的长度和使用的纠错等级 |
level | 纠错等级 | str,控制纠错水平,范围是L、M、Q、H,从左到右依次升高,默认纠错等级为'H' |
picture | 结合图片 | str,将QR二维码图像与一张同目录下的图片相结合,产生一张黑白图片 |
colorized | 颜色 | bool,指定二维码颜色 |
contrast | 对比度 | float,调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0 |
brightness | 亮度 | float,调节图片的亮度,其余用法和取值与 contrast 相同 |
save_name | 输出文件名 | str,默认输出文件名是"qrcode.png" |
save_dir | 存储位置 | str,默认存储位置是当前目录 |
尽量不要选择复杂的动图,不堪看起来很乱