任务 3 MyQR生成二维码操作示例
任务目的
这一步会介绍通过Python中的MyQR包实现生成二维码的操作,包括生成普通二维码、带有静态图和动态图的二维码,同时也会对MyQR生成二维码的常用参数进行介绍说明。
任务步骤
注:CVM适合用于搭建远程服务器,但是如果在CVM中直接进行图片的访问工作,需要先进行一些相关的配置。等到接下来需要构建服务器进行测试时,再通过CVM构建完整的Web项目。
这一步为了聚焦在MyQR的使用和实现,在本地的Windows环境中展示图片二维码的生成环节。这一步需要用到Python和MyQR,但暂时不会用到Flask项目。
1.Windows环境配置
Windows环境中的Python环境配置流程如下:
(1)下载并安装Python
访问 Python官方网站 ,或点击下方的下载链接完成 Python for Windows 软件下载。
注:完成此教程时,最新版本为Python3.8.1,下方提供的链接均为此版本。
下载完成后打开软件,并依据提示进行安装。
安装前切记勾选Add Python to PATH
,将Python添加到环境变量中:
(2)使用pip安装MyQR
打开命令行软件(命令提示符、PowerShell或其他终端,本例中使用PowerShell进行实验),安装MyQR:
- 使用
Windows键 + R
键打开 “运行” 界面 - 输入
powershell
,然后按下回车键
打开PowerShell终端 - 执行MyQR安装命令:
pip install myqr
- 执行MyQR安装命令:
pip install myqr
- 完成环境配置,退出终端
注:区别于CVM中的
pip3
命令,此处的安装命令使用pip
。官方自2020年1月1日已停止对Python2
的更新和技术支持,所以新版本中python
和pip
默认表示原来的python3
和pip3
。 而在CVM实验中使用的CentOS发布于Python2
停止技术支持以前,所以默认沿用了过去的命令调用方式——即使用python3
和pip3
表示Python3的解释器和包管理器。
2.准备图片
下面的实验需要用到一些图片,用于制作图片二维码。支持的格式有:bmp、jpg、png、gif。虽然使用任意长宽比的图片都可以完成实验操作,但为了避免生成的二维码中图片被拉伸,此处建议使用正方形图片与二维码结合。
演示项目中已经准备好了一些正方形图片,并存储在images
目录下,用于进行接下来的演示。
注:此实验目录需要用户手动创建。建议用户选择一个不含中文的路径作作为实验路径,然后在此路径下新建一个名为
images
的目录。
示例图片下载地址:
3.生成普通二维码
这一步将会使用MyQR生成一个不含图片的普通的二维码。
生成普通二维码的流程如下:
(1)打开Windows文件资源管理器,进入图片文件夹images
的所在目录,打开命令行软件(命令提示符、PowerShell或其他终端,本例中使用PowerShell进行实验)。使用命令python
进入Python3交互终端,下面的命令运行在Python3的交互终端中。
注:想要在指定目录下打开命令提示符,可以先进入对应目录,按下
shift
键不放,然后按下鼠标右键,在展开的菜单栏中选择需要使用的命令行软件。 如使用 PowerShell,即选择 “在此处打开 PowerShell 窗口” 。展示效果如下:4-3-4 在指定目录打开命令行软件
(2)从MyQR中导入myqr模块
from MyQR import myqr
(3)生成包含链接的普通二维码
myqr.run("https://cloud.tencent.com/")
此处仅添加了一个必需参数words
,类型为字符串(目前仅支持数字、英文和常用符号,输入中文或其他文字将会报错),对应扫描二维码后展示的链接或文本内容。
此例中以"https://cloud.tencent.com/"
作为words
参数的值,即扫描二维码后,将会访问此链接。
生成成功后,会返回一个元组,类似下面的格式:
(4, 'H', 'D:\\qrcode.png')
其中包含三个元素,分别对应二维码的边长(可加脚注)、纠错等级(可加脚注)和存储路径。
进入图片的导出路径,可以看到导出的图片文件qrcode.png
,打开文件,可以看到生成的普通二维码文件:
打开文件,扫描图片上的二维码,确认可以成功进入腾讯云首页。说明普通二维码生成成功。
4.生成包含图片的二维码
无需退出终端,继续执行下面的操作即可。
(1)在生成二维码的函数中,额外添加一个参数picture
,参数的值为图片的路径:
myqr.run("https://cloud.tencent.com/", picture="cloud_jpg.jpg")
返回的结果同样会生成图片的相关信息,根据图片的导出路径,可以获取到图片所在位置。打开图片,看到生成的图片展示效果如下:
这张二维码图片不仅包含了需要访问的链接信息,同时还合并了参数picture
中的图片对象,生成了一张包含图片的二维码。
扫描生成的二维码,同样可以顺利进入腾讯云首页,说明图片二维码生成成功。
但是需要注意:如果只是指定了图片参数,默认生成的二维码为黑白格式。
如果希望生成彩色的图片二维码,还需要在myqr.run()
函数中额外添加参数 colorized=True
,此参数的作用是指定生成的二维码格式为彩色。
尝试执行命令:
myqr.run("https://cloud.tencent.com/", picture="cloud_jpg.jpg", colorized=True)
这次将会生成包含图片的彩色二维码,新的二维码展示效果如下:
访问导出路径打开图片,这次的二维码与上一次包含内容和图片均一致,唯一区别在于图片由黑白变成了彩色。
尝试扫描二维码,确认可以顺利进入腾讯云首页,说明彩色图片二维码生成成功且有效。
需要注意:如果按照上面的代码进行操作,会发现生成彩色二维码后,原来的黑白二维码消失了。这是因为使用图片生成二维码时,如果没有指定生成的图片名称,默认会使用 <原图片名>_qrcode.png
作为生成的文件名。两次测试使用的是同一张图片,所以新生成的彩色二维码文件,会覆盖掉原有的黑白二维码文件。
如果希望能够指定文件的存储名称,可以在myqr.run()
函数中添加参数save_name
,对应的参数值即为生成的图片二维码文件名。
这次尝试通过指定文件名,重新生成一个名为cloud_black_white.jpg
的黑白二维码(生成黑白二维码无需再添加colorized
参数):
myqr.run("https://cloud.tencent.com/", picture="cloud_jpg.jpg", save_name="cloud_black_white.jpg")
注:图片名称可以相对添加路径,保存时将会自动识别路径并存储到对应路径下(需要提前创建路径)。
根据生成的链接访问路径,发现对应的图片二维码已经生成,且可以正常访问,说明指定文件名生成图片二维码的操作执行成功。
注意:指定生成二维码文件名称的同时,还需要指定文件的后缀。 生成黑白图片时,后缀名与源文件名保持一致即可; 生成彩色图片时,源文件后缀为
.jpg
的图片,生成文件的后缀需要修改为.bmp
,.png
或.gif
,否则将会报错。这是由于合成二维码需要支持Alpha色彩空间,即图片的透明度。 JEPG格式的文件不支持此参数,无法用于进行彩色图片与二维码合并。gif图片同样不支持,但MyQR中对gif格式的图片进行了额外的判断处理。
对于gif动态图,生成的流程与上方流程一致,如果需要指定保存文件名,记得设置文件名后缀为.gif
:
myqr.run("https://cloud.tencent.com/", picture="pic_gif.gif", colorized=True, save_name="gif_qrcode.gif")
此处使用的源图片为pic_gif.gif
,生成的二维码为彩色,保存的文件名为gif_qrcode.gif
。
注:对于细节比较丰富的图片或动态图,生成二维码的所需时间会明显增加,且二维码包含内容越多,生成所需的时间越久。如果执行命令后没有立即返回结果,是因为二维码正在合成,此时请耐心等待。
生成的彩色动态图二维码展示效果如下:
扫描生成的二维码,确认可以成功跳转到腾讯云主页面,证明动态二维码生成成功。
5.myqr.run()函数中的参数说明:
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
words | 二维码指向链接或文本(必填)。 | str | 数字 0 到 9;大小写的英文字母;常用英文标点符号和空格 | 无 |
version | 边长。范围是1~40,值越大边长越大。默认的边长取决于"words"的长度和纠错等级。 | int | 1~40 | 1 |
level | 纠错等级,即二维码的纠错能力,从低到高依次为"L", "H", "M", "Q"。纠错等级越高,纠错能力也相应提高,但由于数据量会随之增加,编码尺寸也也会变大。 | str | "L", "H", "M", "Q" | "H" |
picture | 与二维码进行结合的图片,支持的图片格式为 | str | None | |
colorized | 颜色。默认为黑白,设置值为 | bool | True, False | False |
contrast | 对比度。默认值为1.0,值越小对比度越低,值越大对比度越高。 | float | 1.0 | |
brightness | 亮度。默认值为1.0,值越小亮度越低,值越大亮度越大。 | float | 1.0 | |
save_name | 输出文件名。如果没有指定,默认生成文件名为 | str | qrcode.png | |
save_dir | 存储位置。默认存储在当前目录。 | str | os.getcwd() |
学员评价