python 二维码制作

**

二维码简介

**
我们日常使用是扫一个二维码就跳转到某个页面。但本质而言,扫二维码就是得到内容,而不会跳转什么页
面。
比如微信等扫二维码就是得到“https://www.baidu.com” (https://www.baidu.com”)
至于自动跳到百度首页是因为微信添加了如果扫描二维码结果是url就自动跳转的代码造成的。
也就是说二维码的内容完全可以不是url,而是“abcd”等仍意字符串,用微信扫时显示“abcd”而不是跳转什么页
面而已。
不过由于二维码(指qr code)的容量是有限的,只有几百到几千个字节,所以一般不会直接用来存图片等内
容。
项目概述
模块介绍
本项目用到qrcode,myqr模块
qrcode文档地址:https://github.com/lincolnloop/python-qrcode
(https://github.com/lincolnloop/python-qrcode)
myqr文档地址:https://github.com/sylnsfar/qrcode (https://github.com/sylnsfar/qrcode)
函数功能介绍本
文件有4个函数:
函数1:qrCreaterSimple(txt=‘Hello World!’,qrName=‘qrDemo1.png’)
功能:根据txt内容生成简单二维码,并以qrName保存到当前目录下
函数2:qrCreaterByUser()
功能:用户可通过交互输入txt内容和qrName信息,结果与函数1相同
函数3:createQRcode(url,logoPic,QRcodeName)
功能:生成专属logo的二维码
参数:url为二维码内容;logoPic为二维码中间的标志性图片;QRcodeName为二维码文件名
函数4:createAnimatedQR(words, picture, qrName)
功能:利用动态.gif,生成动态的二维码
参数:words为二维码内容;picture为gif动画;qrName为二维码文件名(.gif)
代码实现
2019/9/9 QRcode
file:///E:/Downloads/QRcode.html 2/7
In [ ]:

-- encoding: UTF-8 --

test created on 19-05-20 上午10:35

python3.7

from PIL import Image
import qrcode,os
from MyQR import myqr
In [ ]:
help(qrcode)
In [ ]:
dir(qrcode)
简单的文本二维码
###########################任务1.快速生成一个简单的文本二维码
In [7]:
qrcode.make(“I love you”).get_image().show()
In [8]:
txt = “Hello world”
pic1 = ‘demo1.png’
img = qrcode.make(txt)
#img.get_image().show()
img.save(pic1)
In [9]:
import os
os.getcwd()
In [10]:
def qrCreaterSimple(txt=‘Life is short We use Python!’,qrName=‘qrDemo1.png’):
#步骤如下:
#s1:创建qrcode对象
#qrcode.make(str):str为二维码包含的文字信息,也可以是网页链接
img = qrcode.make(txt)
#s2:显示
#qrcode.show():运行时展示二维码图案
#img.get_image().show()
#s3:保存
##qrcode.save(str):将二维码以str为名保存到本地目录(注意文件的扩展名)
img.save(qrName)
print(“The QrCodePicture done,please check {}”.format(qrName))
Out[9]:
‘D:\JupyterProjects\HandoutProCourse190615\Chap0 Introduction\QRcoder’
2019/9/9 QRcode
file:///E:/Downloads/QRcode.html 3/7
自定义二维码内容
######################任务2.用户可自定义二维码内容
In [12]:
def qrCreaterByUser():
txt = input(“输入文字或URL:”) # 输入’http://www.hebau.edu.cn/’
qrName = input(“输入二维码的名称(.png/.jpg):”)
qrCreaterSimple(txt, qrName)
专属logo的二维码
#####################任务3.拥有专属logo的二维码
2019/9/9 QRcode
file:///E:/Downloads/QRcode.html 4/7
In [15]:
#url:二维码数据
#logoPic:logo图片
#QRcodeName:二维码图片的名称
def createQRcode(url,logoPic,QRcodeName):

S1:创建对象qr =qrcode.QRCode(),即实例化二维码生成类

qr = qrcode.QRCode(version=1, #设置容错率为最高
error_correction=qrcode.ERROR_CORRECT_H, # 用于控制二维码的错误纠正程度
box_size=8, #控制二维码中每个格子的像素数,默认为10
border=1, # 二维码四周留白,包含的格子数,默认为4
#image_factory=None, 保存在模块根目录的image文件夹下
#mask_pattern=None
)
#version:值为1~40的整数,控制二维码的大小(最小值是1,是个21×21的矩阵)
#error_correction:控制二维码的错误纠正功能。可取值下列4个常量:
#ERROR_CORRECT_X:
#X=L时,大约7%或更少的错误能被纠正。
#X=M(默认)时,大约15%或更少的错误能被纠正。
#X=Q时,25%以下的错误会被纠正 。
#X=H时,大约30%或更少的错误能被纠正
#box_size:控制二维码中每个小格子包含的像素数。
#border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4)

S2:设置二维码数据

qr.add_data(data=url) #QRCode.add_data(data)函数:用于添加数据
qr.make(fit=True) #QRCode.make(fit=True)函数:用于生成图片,fit=True实现大小自适应

S3:启用二维码颜色设置

img = qr.make_image(fill_color=“green”, back_color=“white”)#可设置前景色,背景色
img = img.convert(“RGBA”) #二维码设为彩色

logo = Image.open(logoPic) #获取logo图片

S4:根据二维码大小和logo图片大小,进行整合设置

imgW, imgH = img.size
logoW,logoH = logo.size

factor = 4 #默认logo最大设为图片的四分之一
sizeW = int(imgW / factor)
sizeH = int(imgH / factor)
if logoW > sizeW or logoH > sizeH:
logoW = sizeW
logoH = sizeH
#重新调整logo图片及设置其在二维码中的位置
logo = logo.resize((logoW, logoH), Image.ANTIALIAS) #antialias
setX = int((imgW - logoW) / 2)
setY = int((imgH - logoH) / 2)
logo = logo.convert(“RGBA”)
img.paste(logo,(setX, setY),logo) #把logo贴到img二维码的(setX, setY)位置上

S5:显示二维码

#img.show()
img.save(os.getcwd()+’/’ + QRcodeName, quality=100)
print(“The QrCodePicture done,please check {}”.format(os.getcwd()+’\’+ QRcodeName))
2019/9/9 QRcode
file:///E:/Downloads/QRcode.html 5/7
In [14]:
import os
os.getcwd()
动态二维码
##########################任务4.MyQR生成动态二维码
注意:动态图片必须为gif动图
In [20]:
#官方文档:https://github.com/sylnsfar/qrcode#terminal-way
#注意:若要显示动画,picture本身需为*.gif动画格式,qrName的扩展名也必须为.gif。
def createAnimatedQR(words, picture, qrName):
version, level, qrPath = myqr.run( words = words, #url或txt,在当前目录产生二维码图
片,默认命名为"qrcode.png"
version = 1, #设置容错率为最高
level = ‘H’, #控制纠错水平,范围是L、M、Q、H,从
左到右依次升高
picture = picture, #用来将QR二维码图像与一张同目录下的
图片相结合,产生一张黑白图片
colorized = True, #可使产生的图片由黑白(False)变为彩色
(True)的
contrast = 1.0, #图片的对比度,默认为1.0表示原始图
片,更小的值表示更低对比度,更大反之。
brightness = 1.0, #用来调节图片的亮度
save_name = qrName, #控制文件名,格式可以是 .jpg, .png
,.bmp ,.gif
save_dir = os.getcwd()#控制位置
)
print(“version={},level={},qrPath={}”.format(version, level, qrPath))
print(“The AnimatedQrCodePicture done,please check {}”.format(qrPath))
#*****************************************************************************
Out[14]:
‘D:\JupyterProjects\HandoutProCourse190615\Chap0 Introduction\QRcoder’

file:///E:/Downloads/QRcode.html 6/7
In [19]:
help(myqr.run)
函数功能测试:
In [11]:
#########实验1#########
print(“start to test 1…”)
txt = ‘我和我的祖国,一刻不能分割’
qrName = “QRdemo2.png”
qrCreaterSimple(txt, qrName)
print(“test 1 finished”)
In [13]:
#########实验2#########
print(“start to test 2…”)
#需要输入二维码内容
#需要输入最后生成的文件名
qrCreaterByUser()
print(“test 2 finished”)
Help on function run in module MyQR.myqr:
run(words, version=1, level=‘H’, picture=None, colorized=False, contrast=1.0, brig
htness=1.0, save_name=None, save_dir=‘D:\JupyterProjects\HandoutProCourse190615
\Chap0 Introduction\QRcoder’)

Positional parameters

words: str

Optional parameters

version: int, from 1 to 40

level: str, just one of (‘L’,‘M’,‘Q’,‘H’)

picutre: str, a filename of a image

colorized: bool

constrast: float

brightness: float

save_name: str, the output filename like ‘example.png’

save_dir: str, the output directory

See [https://github.com/sylnsfar/qrcode] for more details!

start to test 1…
The QrCodePicture done,please check QRdemo2.png
test 1 finished
start to test 2…
输入文字或URL:www.hebau.edu.cn
输入二维码的名称(.png/.jpg):hebau.jpg
The QrCodePicture done,please check hebau.jpg
test 2 finished

file:///E:/Downloads/QRcode.html 7/7
In [16]:
#########实验3#########
print(“start to test 3…”)
url = “http://www.hebau.edu.cn”
logoPic = ‘hebau.png’
QRcodeName = ‘QRdemo3.png’
createQRcode(url,logoPic,QRcodeName)
print(“test 3 finished”)
In [21]:
#########实验4#########
print(“start to test 4…”)
words = “http://www.hebau.edu.cn/”
picture = ‘cat1.gif’
qrName = ‘QRdemo4.gif’
createAnimatedQR(words, picture, qrName)
print(“test 4 finished”)
总结
qrcode.make() — 快速生成二维码
qrcode.QRCode() — 可为二维码添加专属logo
myqr.run() ---- 动态效果的二维码
start to test 3…
The QrCodePicture done,please check D:\JupyterProjects\HandoutProCourse190615\Chap
0 Introduction\QRcoder\QRdemo3.png
test 3 finished
start to test 4…
line 16: mode: byte
version=4,level=H,qrPath=D:\JupyterProjects\HandoutProCourse190615\Chap0 Introduct
ion\QRcoder\QRdemo4.gif
The AnimatedQrCodePicture done,please check D:\JupyterProjects\HandoutProCourse190
615\Chap0 Introduction\QRcoder\QRdemo4.gif
test 4 finished

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值