【Python应用】从零开始自己实现生成二维码

1. 二维码随处可见

在我们的生活中,二维码可以说是无处不在了:加好友?扫个码!付钱?扫个码!大街小巷,二维码随处可见,甚至小广告里也加上了二维码。

如今,二维码已经有了信息获取、网站跳转、手机电商以及手机支付等多种功能。大家平时见到最多的应该是黑白的二维码。就像这样:

å¨è¿éæå¥å¾çæè¿°

以下的内容中,你将会了解到二维码的基本知识并且学会制作一个属于你自己的动态二维码。

让我们一起来吧。

 

2. 二维码基础知识

二维码是用某种特定的几何图形按一定规律在平面(也即二维方向上)分布的黑白相间的图形记录数据符号信息的,它利用了计算机内部逻辑“0”“1”的概念,用几个与二进制相对应的几何图形来表示文字信息,每种码都有特定的字符集。

各部分解析:

  • 位置探测图形:由三个黑白相间的大正方形嵌套组成,分别位于二维码左上角、右上角、左下角,目的是为了确定二维码的大小和位置。
  • 定位图形 :由两条黑白相间的直线组成,便于确定二维码的角度,纠正扭曲。
  • 校正图形 :仅在版本2以上存在,由三个黑白相间的小正方形嵌套组成,便于确定中心,纠正扭曲。
  • 数据和纠错码记录数据信息和相应的纠错码,纠错码的存在使当二维码的数据出现允许范围内的错误时,也可以正确解码。
  • 版本信息 :仅在版本7以上存在,记录具体的版本信息。
  • 格式信息 :记录使用的掩码和纠错等级。

好了,基础知识到这里,接下来我们来一步一步实现生成二维码。

 

3. 环境准备

安装导入qrcode以及myqr库,依次点击“开始”-“运行”-输入“cmd”,通过pip依次安装:

pip install qrcode

pip install myqr

 

4. 简单的开始

然后我们开始制作一个最简单的二维码,代码如下:

import qrcode

'''
qrcode.make(str):str为二维码包含的文字信息,也可以是网页链接,返回二维码对象
qrcode.save(str):将二维码以str为名保存到本地目录(注意文件的扩展名)
qrcode.show():运行时展示二维码图案
'''
#创建包含信息的二维码对象
img = qrcode.make("hello,world")
#二维码保存
img.save('hello.png')
#展示二维码
img.show()

运行后如下:

 

5. 进阶实现

稍作修改就可以自行输入二维码表示的信息:

import qrcode

content = input("请输入二维码包含的内容(文字/url):")
img = qrcode.make(content)
#二维码保存
img.save('E:/PythonPractice/新建文件夹/ha.png')
#展示二维码
img.show()

然后我们给二维码加一个logo:

from PIL import Image
import qrcode

def main():
    #QRCode()这里我们创建了一个对象:
    qr = qrcode.QRCode(version=5,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=8,border=4)
    #version:值为1~40的整数,控制二维码的大小(最小值是1,是个21×21的矩阵)
    #error_correction:控制二维码的错误纠正功能。可取值下列4个常量: 
    '''
    qrcode.constants.ERROR_CORRECT_X:
        1. X=L时,大约7%或更少的错误能被纠正。 
        2. X=M(默认)时,大约15%或更少的错误能被纠正。
        3. X=Q时,25%以下的错误会被纠正。
        4. X=H时,大约30%或更少的错误能被纠正。
        '''
    #box_size:控制二维码中每个小格子包含的像素数。
    #border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4)


    #向二维码中添加信息
    qr.add_data("http://www.jason-niu.com")

    qr.make(fit=True)

    img = qr.make_image()
    #二维码设置为彩色
    img = img.convert('RGBA')
    #打开logo图片
    logo = Image.open("bit.png")
    #二维码尺寸
    img_w,img_h = img.size
    #默认LOGO最大设为图片的1/4
    factor = 4
    #最大logo尺寸
    size_w = int(img_w/factor)
    size_h = int(img_h/factor)
    #logo的尺寸
    logo_w,logo_h = logo.size

    if logo_w > size_w or logo_h > size_h:
        logo_w = size_w
        logo_h = size_h
    logo = logo.resize((logo_w,logo_h),Image.ANTIALIAS).convert('RGBA')
    l_w = int((img_w-logo_w)/2)
    l_h = int((img_h-logo_h)/2)
    #替换指定位置
    img.paste(logo,(l_w,l_h),logo)
    img.show()
    img.save('北京理工大学主页.png')

if __name__ == '__main__':
    main()

运行结果如下,扫描之后就能登录到北京理工大学的主页。

6 . 生成动态二维码

这下我们就要用到MyQR库了

from MyQR import myqr

import os

myqr.run(words="https://www.baidu.com",version=1, level='H',picture="1.gif",colorized=True, contrast=1.0,brightness=1.0,save_name="3.gif",save_dir=os.getcwd())
#os.getcwd()返回当前工作目录

下面我们来详细的讲解一下 myqr.run() 函数里面的参数

参数含义详细
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,默认存储位置是当前目录

å¨è¿éæå¥å¾çæè¿°

PS:二维码具有容错功能,当二维码图片被遮挡一部分后,仍可以扫描出来。容错的原理是二维码在编码过程中进行了冗余,就像是123被编码成123123,这样只要扫描到一部分二维码图片,二维码内容还是可以被全部读到。二维码容错率即是指二维码图标被遮挡多少后,仍可以被扫描出来的能力。容错率越高,则二维码图片能被遮挡的部分越多。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

薛定谔的猫96

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

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

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

打赏作者

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

抵扣说明:

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

余额充值