教你用Python生成个性二维码

编程就像做爱,你得为一个错误提供一辈子的支持

 之前见到的二维码都是这样的,很是枯燥,我们需要一些个性化的东西

今天就给大家介绍一个库专门做二维码的,它叫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,默认存储位置是当前目录

 

尽量不要选择复杂的动图,不堪看起来很乱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽蓝丶流月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值