6分钟

任务 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,下方提供的链接均为此版本。

32位版本

64位版本

下载完成后打开软件,并依据提示进行安装。

安装前切记勾选Add Python to PATH,将Python添加到环境变量中:

4-3-1 Window中安装Python

(2)使用pip安装MyQR

打开命令行软件(命令提示符、PowerShell或其他终端,本例中使用PowerShell进行实验),安装MyQR:

4-3-2 Windows环境配置
  • 使用Windows键 + R键打开 “运行” 界面
  • 输入powershell,然后按下回车键打开PowerShell终端
  • 执行MyQR安装命令:pip install myqr
  • 执行MyQR安装命令:pip install myqr
  • 完成环境配置,退出终端

注:区别于CVM中的pip3命令,此处的安装命令使用pip。官方自2020年1月1日已停止对Python2的更新和技术支持,所以新版本中pythonpip默认表示原来的python3pip3。 而在CVM实验中使用的CentOS发布于Python2停止技术支持以前,所以默认沿用了过去的命令调用方式——即使用python3pip3表示Python3的解释器和包管理器。

2.准备图片

下面的实验需要用到一些图片,用于制作图片二维码。支持的格式有:bmp、jpg、png、gif。虽然使用任意长宽比的图片都可以完成实验操作,但为了避免生成的二维码中图片被拉伸,此处建议使用正方形图片与二维码结合。

演示项目中已经准备好了一些正方形图片,并存储在images目录下,用于进行接下来的演示。

注:此实验目录需要用户手动创建。建议用户选择一个不含中文的路径作作为实验路径,然后在此路径下新建一个名为images的目录。

4-3-3 准备的图片

示例图片下载地址:

cloud_jpg.jpg

cloud_png.png

pic_gif.gif

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-3-5 生成的二维码文件

打开文件,扫描图片上的二维码,确认可以成功进入腾讯云首页。说明普通二维码生成成功。

4.生成包含图片的二维码

无需退出终端,继续执行下面的操作即可。

(1)在生成二维码的函数中,额外添加一个参数picture,参数的值为图片的路径:

myqr.run("https://cloud.tencent.com/", picture="cloud_jpg.jpg")

返回的结果同样会生成图片的相关信息,根据图片的导出路径,可以获取到图片所在位置。打开图片,看到生成的图片展示效果如下:

4-3-6 生成黑白二维码

这张二维码图片不仅包含了需要访问的链接信息,同时还合并了参数picture中的图片对象,生成了一张包含图片的二维码。

扫描生成的二维码,同样可以顺利进入腾讯云首页,说明图片二维码生成成功。

但是需要注意:如果只是指定了图片参数,默认生成的二维码为黑白格式

如果希望生成彩色的图片二维码,还需要在myqr.run()函数中额外添加参数 colorized=True,此参数的作用是指定生成的二维码格式为彩色。

尝试执行命令:

myqr.run("https://cloud.tencent.com/", picture="cloud_jpg.jpg", colorized=True)

这次将会生成包含图片的彩色二维码,新的二维码展示效果如下:

4-3-7 生成彩色二维码

访问导出路径打开图片,这次的二维码与上一次包含内容和图片均一致,唯一区别在于图片由黑白变成了彩色。

尝试扫描二维码,确认可以顺利进入腾讯云首页,说明彩色图片二维码生成成功且有效。

需要注意:如果按照上面的代码进行操作,会发现生成彩色二维码后,原来的黑白二维码消失了。这是因为使用图片生成二维码时,如果没有指定生成的图片名称,默认会使用 <原图片名>_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

注:对于细节比较丰富的图片或动态图,生成二维码的所需时间会明显增加,且二维码包含内容越多,生成所需的时间越久。如果执行命令后没有立即返回结果,是因为二维码正在合成,此时请耐心等待。

生成的彩色动态图二维码展示效果如下:

4-3-8 生成动态图二维码

扫描生成的二维码,确认可以成功跳转到腾讯云主页面,证明动态二维码生成成功。

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

与二维码进行结合的图片,支持的图片格式为.jpg, .png, .bmp, .gif

str

None

colorized

颜色。默认为黑白,设置值为True可以将图片变为彩色。

bool

True, False

False

contrast

对比度。默认值为1.0,值越小对比度越低,值越大对比度越高。

float

1.0

brightness

亮度。默认值为1.0,值越小亮度越低,值越大亮度越大。

float

1.0

save_name

输出文件名。如果没有指定,默认生成文件名为qrcode.png

str

qrcode.png

save_dir

存储位置。默认存储在当前目录。

str

os.getcwd()