前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【云+社区年度征文】全网第一个基于云函数的马保国彩色二维码生成器

【云+社区年度征文】全网第一个基于云函数的马保国彩色二维码生成器

原创
作者头像
薛定喵君
修改2020-11-27 18:13:14
1.8K0
修改2020-11-27 18:13:14
举报
文章被收录于专栏:薛定喵君薛定喵君

前言

接触云函数已经有一段时间嘞,TCB云开发的云函数对于前端开发人员来说是一个开发利器,我们可以基于云函数开发很多有意思的应用。这不,我们可以用它来合成彩色二维码,就让马保国老师来成为上云第一人吧(程序员要讲码德,耗子尾汁)。

函数创建

登录腾讯云账号点击云函数选择新建云函数 colorful_qrcode

create_func.png
create_func.png

安装 CloudBase CLI

没有安装 node 环境的要先安装 node.js。

安装@cloudbase/cli
代码语言:txt
复制
npm i -g @cloudbase/cli

如果安装失败,则您可能需要修改 npm 权限,或者以系统管理员身份运行如下代码:

代码语言:txt
复制
sudo npm install -g @cloudbase/cli

测试安装结果

代码语言:txt
复制
cloudbase -v

下载云函数并编写代码

终端中登录腾讯云

终端中输入下面的命令:

代码语言:txt
复制
tcb login

CloudBase CLI 会自动打开云开发控制台获取授权,单击同意授权按钮允许 CloudBase CLI 获取授权。

下载云函数

1.新建文件夹 tcb

2.CD进入文件夹新建配置文件cloudbaserc.json

输入如下内容

代码语言:txt
复制
{
  "envId": "环境ID",
  "functionRoot": "functions",
  "functions": [
    {
      "name": "colorful_qrcode",
      "timeout": 60,
      "runtime": "Python3.6",
      "installDependency": false,
      "handler": "index.main"
    }
  ]
}

3.下载函数并编写代码

代码语言:txt
复制
cloudbase functions:download colorful_qrcode
tcb_fun_download.png
tcb_fun_download.png

生成二维码有很多方案,这里需要生成彩色的所以就用了 Python 的 MyQR 生成工具。

代码语言:txt
复制
version, level, qr_name = myqr.run(
    words=words,  # 不支持中文,支持 0~9,a~z, A~Z 以及常见的常用英文标点符号和空格
    version=13,  # 版本,从 1至 40
    level='H',  # 纠错等级,范围是L、M、Q、H,从左到右依次升高
    picture=picture,  # 文件要放在目录下
    colorized=True,   # True 为彩色,False 为黑白
    contrast=1.0,  # 对比度
    brightness=1.0,  # 亮度
    save_name=save_name,  # 命名随便都行,格式可以是 jpg,png,bmp,gif
    save_dir=os.getcwd()  # 路径要存在
)

函数部署

函数是用 Python 写的,运行时为 3.6

1.安装依赖

输入如下命令生成 requirements.txt 文件

代码语言:txt
复制
pip3 freeze > requirements.txt

2.项目根目录安装依赖

代码语言:txt
复制
pip3 install -r requirements.txt -t ./

3.使用如下命令部署

代码语言:txt
复制
cloudbase functions:deploy colorful_qrcode

可以在命令后附加 --force 选项指定 Cloudbase CLI 覆盖已存在的云函数。

体验方法

HTTP 访问服务地址:

http://tcb.xuedingmiao.com/colorful_qrcode

支持传入两个参数:

  • 请求参数说明:

名称

类型

必填

说明

bgPic

string

false

二维码背景图

content

string

false

二维码内容

  • bgPic 为图片的网络地址,函数执行时会把图片下载下来
  • bgPic 参数缺省时默认返回马保国老师,支持传入 jpg,png,bmp,gif 格式的网络图片
  • content 为生成二维码的内容,不支持中文,支持 0~9,a~z, A~Z 以及常见的常用英文标点符号和空格,缺省时默认返回博主公号地址
默认返回内容
默认返回内容

GIF示例:

colorful_qrcode_mbg_hzwz.gif
colorful_qrcode_mbg_hzwz.gif
colorful_qrcode_other.gif
colorful_qrcode_other.gif

说说几个坑点

这是博主的第一个 Python 云函数,自然踩了很多坑,差点放弃了马(保国)老师。

1.运行环境

第一个坑就是 Python 依赖安装了,官方虽有文档说明但是写的不够清楚,博主最后使用的pip3 install -r requirements.txt -t ./进行的依赖安装。

然后文档上有这么一句话:

函数运行的系统是 CentOS 7,您需要在相同环境下进行安装。若环境不一致,则可能导致上传后运行时出现找不到依赖的错误。

所以为了保险起见,我在 centos7 上安装了一遍并进行了部署(下图为博主使用的系统版本)。

centos-version.png
centos-version.png

然后还是遇到了依赖问题:

代码语言:txt
复制
ImportError: cannot import name '_imaging'

不过这个只要把 pillow 版本改为 4.0.0 就可以了。

2.文件夹权限

云函数在执行过程中,都拥有一块500MB的临时磁盘空间 /tmp,用户可以在执行代码时对该空间进行一些读写操作,也可以创建子目录,但这部分数据在函数执行完成后不会保留。

运行环境内除 /tmp 目录下,其他均限制为只读。

所以在本函数中我们要把生成二维码的目录改为 /tmp,这样才可以得到二维码。

3.执行时间及内存

因为在执行过程中需要下载网络图然后生成二维码所以需要把超时时间改为较大的时间,同样为了增加执行效率也需要适当修改内存配置

函数配置
函数配置

其它问题

不推荐使用大的 GIF 图玩耍,较容易出现类似如下的执行超时错误

代码语言:txt
复制
Result:{"errorCode":-1,"errorMessage":"Invoking task timed out after 60 seconds"}

参考文档

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 函数创建
  • 安装 CloudBase CLI
    • 安装@cloudbase/cli
    • 下载云函数并编写代码
      • 终端中登录腾讯云
        • 下载云函数
        • 函数部署
        • 体验方法
        • 说说几个坑点
          • 1.运行环境
            • 2.文件夹权限
              • 3.执行时间及内存
              • 其它问题
              • 参考文档
              相关产品与服务
              云函数
              云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档