{"componentChunkName":"component---src-templates-best-practice-detail-tsx","path":"/best-practice/2020-03-12-avatar-decoration","result":{"data":{"currentBlog":{"id":"1f1b1317-32a1-50c4-a77f-df648ee9128f","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020511/1589207418152-ZalNtxgQAC_small.jpg","authors":["Anycodes"],"categories":["best-practice"],"date":"2020-03-12T00:00:00.000Z","title":"让 Serverless 为你的头像增加点装饰","description":"无论是国庆还是新年，经常会有一个平台为我们提供一个生成头像的小工具，本文手把手教你实现头像加装饰的工具","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["Serverless","图像处理"],"keywords":"Serverless 多环境配置,Serverless 管理环境,Serverless配置方案","outdated":true},"wordCount":{"words":106,"sentences":29,"paragraphs":29},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-03-12-avatar-decoration.md","fields":{"slug":"/best-practice/2020-03-12-avatar-decoration/","keywords":["go","java","python","serverless","website","云函数","mui","pic","base","shape"]},"html":"<p>无论是国庆还是新年，经常会有一个平台为我们提供一个生成头像的小工具，很是新奇好玩，这类平台/工具，一般都有两个方法给我们制作头像。</p>\n<ul>\n<li>直接加装饰，例如外面加一个框框，下面加一个 logo 等；</li>\n<li>通过一些机器学习算法，增加一些装饰，例如增加一个圣诞帽等；</li>\n</ul>\n<h2 id=\"serverless直接增加头像装饰\"><a href=\"#serverless%E7%9B%B4%E6%8E%A5%E5%A2%9E%E5%8A%A0%E5%A4%B4%E5%83%8F%E8%A3%85%E9%A5%B0\" aria-label=\"serverless直接增加头像装饰 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Serverless直接增加头像装饰</h2>\n<p>其实这个功能很简单，主要功能就是选择一个图片，上传自己的头像，然后函数部分进行图像的合成，这一部分并没有涉及到机器学习算法，仅仅是图像合成相关算法。</p>\n<p>主要通过用户上传的图片，在指定位置增加预定图片/用户选择的图片作为装饰物进行添加，添加过程是：</p>\n<ul>\n<li>将预定图片/用户选择的图片进行美化，此处仅是将其变成圆形：</li>\n</ul>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"969166837750123900\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`def do_circle(base_pic):\n    icon_pic = Image.open(base_pic).convert(&quot;RGBA&quot;)\n    icon_pic = icon_pic.resize((500, 500), Image.ANTIALIAS)\n    icon_pic_x, icon_pic_y = icon_pic.size\n    temp_icon_pic = Image.new('RGBA', (icon_pic_x + 600, icon_pic_y + 600), (255, 255, 255))\n    temp_icon_pic.paste(icon_pic, (300, 300), icon_pic)\n    ima = temp_icon_pic.resize((200, 200), Image.ANTIALIAS)\n    size = ima.size\n\n    # 因为是要圆形，所以需要正方形的图片\n    r2 = min(size[0], size[1])\n    if size[0] != size[1]:\n        ima = ima.resize((r2, r2), Image.ANTIALIAS)\n\n    # 最后生成圆的半径\n    r3 = 60\n    imb = Image.new('RGBA', (r3 * 2, r3 * 2), (255, 255, 255, 0))\n    pima = ima.load()  # 像素的访问对象\n    pimb = imb.load()\n    r = float(r2 / 2)  # 圆心横坐标\n\n    for i in range(r2):\n        for j in range(r2):\n            lx = abs(i - r)  # 到圆心距离的横坐标\n            ly = abs(j - r)  # 到圆心距离的纵坐标\n            l = (pow(lx, 2) + pow(ly, 2)) ** 0.5  # 三角函数 半径\n\n            if l < r3:\n                pimb[i - (r - r3), j - (r - r3)] = pima[i, j]\n    return imb`, `969166837750123900`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">do_circle</span><span class=\"token punctuation\">(</span>base_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    icon_pic <span class=\"token operator\">=</span> Image<span class=\"token punctuation\">.</span><span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span>base_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>convert<span class=\"token punctuation\">(</span><span class=\"token string\">\"RGBA\"</span><span class=\"token punctuation\">)</span>\n    icon_pic <span class=\"token operator\">=</span> icon_pic<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token number\">500</span><span class=\"token punctuation\">,</span> <span class=\"token number\">500</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> Image<span class=\"token punctuation\">.</span>ANTIALIAS<span class=\"token punctuation\">)</span>\n    icon_pic_x<span class=\"token punctuation\">,</span> icon_pic_y <span class=\"token operator\">=</span> icon_pic<span class=\"token punctuation\">.</span>size\n    temp_icon_pic <span class=\"token operator\">=</span> Image<span class=\"token punctuation\">.</span>new<span class=\"token punctuation\">(</span><span class=\"token string\">'RGBA'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>icon_pic_x <span class=\"token operator\">+</span> <span class=\"token number\">600</span><span class=\"token punctuation\">,</span> icon_pic_y <span class=\"token operator\">+</span> <span class=\"token number\">600</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    temp_icon_pic<span class=\"token punctuation\">.</span>paste<span class=\"token punctuation\">(</span>icon_pic<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token number\">300</span><span class=\"token punctuation\">,</span> <span class=\"token number\">300</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> icon_pic<span class=\"token punctuation\">)</span>\n    ima <span class=\"token operator\">=</span> temp_icon_pic<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">,</span> <span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> Image<span class=\"token punctuation\">.</span>ANTIALIAS<span class=\"token punctuation\">)</span>\n    size <span class=\"token operator\">=</span> ima<span class=\"token punctuation\">.</span>size\n\n    <span class=\"token comment\"># 因为是要圆形，所以需要正方形的图片</span>\n    r2 <span class=\"token operator\">=</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>size<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> size<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> size<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> size<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n        ima <span class=\"token operator\">=</span> ima<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>r2<span class=\"token punctuation\">,</span> r2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> Image<span class=\"token punctuation\">.</span>ANTIALIAS<span class=\"token punctuation\">)</span>\n\n    <span class=\"token comment\"># 最后生成圆的半径</span>\n    r3 <span class=\"token operator\">=</span> <span class=\"token number\">60</span>\n    imb <span class=\"token operator\">=</span> Image<span class=\"token punctuation\">.</span>new<span class=\"token punctuation\">(</span><span class=\"token string\">'RGBA'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>r3 <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> r3 <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    pima <span class=\"token operator\">=</span> ima<span class=\"token punctuation\">.</span>load<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># 像素的访问对象</span>\n    pimb <span class=\"token operator\">=</span> imb<span class=\"token punctuation\">.</span>load<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    r <span class=\"token operator\">=</span> <span class=\"token builtin\">float</span><span class=\"token punctuation\">(</span>r2 <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># 圆心横坐标</span>\n\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>r2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>r2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            lx <span class=\"token operator\">=</span> <span class=\"token builtin\">abs</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">-</span> r<span class=\"token punctuation\">)</span>  <span class=\"token comment\"># 到圆心距离的横坐标</span>\n            ly <span class=\"token operator\">=</span> <span class=\"token builtin\">abs</span><span class=\"token punctuation\">(</span>j <span class=\"token operator\">-</span> r<span class=\"token punctuation\">)</span>  <span class=\"token comment\"># 到圆心距离的纵坐标</span>\n            l <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">pow</span><span class=\"token punctuation\">(</span>lx<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token builtin\">pow</span><span class=\"token punctuation\">(</span>ly<span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">**</span> <span class=\"token number\">0.5</span>  <span class=\"token comment\"># 三角函数 半径</span>\n\n            <span class=\"token keyword\">if</span> l <span class=\"token operator\">&lt;</span> r3<span class=\"token punctuation\">:</span>\n                pimb<span class=\"token punctuation\">[</span>i <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>r <span class=\"token operator\">-</span> r3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> j <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span>r <span class=\"token operator\">-</span> r3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> pima<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> imb</code></pre></div>\n<ul>\n<li>添加该装饰到用户头像上：</li>\n</ul>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"13140751930853400000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`def add_decorate(base_pic):\n    try:\n        base_pic = &quot;./base/%s.png&quot; % (str(base_pic))\n        user_pic = Image.open(&quot;/tmp/picture.png&quot;).convert(&quot;RGBA&quot;)\n        temp_basee_user_pic = Image.new('RGBA', (440, 440), (255, 255, 255))\n        user_pic = user_pic.resize((400, 400), Image.ANTIALIAS)\n        temp_basee_user_pic.paste(user_pic, (20, 20))\n        temp_basee_user_pic.paste(do_circle(base_pic), (295, 295), do_circle(base_pic))\n        temp_basee_user_pic.save(&quot;/tmp/output.png&quot;)\n        return True\n    except Exception as e:\n        print(e)\n        return False`, `13140751930853400000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">add_decorate</span><span class=\"token punctuation\">(</span>base_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">try</span><span class=\"token punctuation\">:</span>\n        base_pic <span class=\"token operator\">=</span> <span class=\"token string\">\"./base/%s.png\"</span> <span class=\"token operator\">%</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>base_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        user_pic <span class=\"token operator\">=</span> Image<span class=\"token punctuation\">.</span><span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/tmp/picture.png\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>convert<span class=\"token punctuation\">(</span><span class=\"token string\">\"RGBA\"</span><span class=\"token punctuation\">)</span>\n        temp_basee_user_pic <span class=\"token operator\">=</span> Image<span class=\"token punctuation\">.</span>new<span class=\"token punctuation\">(</span><span class=\"token string\">'RGBA'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token number\">440</span><span class=\"token punctuation\">,</span> <span class=\"token number\">440</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">255</span><span class=\"token punctuation\">,</span> <span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        user_pic <span class=\"token operator\">=</span> user_pic<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token number\">400</span><span class=\"token punctuation\">,</span> <span class=\"token number\">400</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> Image<span class=\"token punctuation\">.</span>ANTIALIAS<span class=\"token punctuation\">)</span>\n        temp_basee_user_pic<span class=\"token punctuation\">.</span>paste<span class=\"token punctuation\">(</span>user_pic<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token number\">20</span><span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        temp_basee_user_pic<span class=\"token punctuation\">.</span>paste<span class=\"token punctuation\">(</span>do_circle<span class=\"token punctuation\">(</span>base_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token number\">295</span><span class=\"token punctuation\">,</span> <span class=\"token number\">295</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> do_circle<span class=\"token punctuation\">(</span>base_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        temp_basee_user_pic<span class=\"token punctuation\">.</span>save<span class=\"token punctuation\">(</span><span class=\"token string\">\"/tmp/output.png\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">True</span>\n    <span class=\"token keyword\">except</span> Exception <span class=\"token keyword\">as</span> e<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">False</span></code></pre></div>\n<ul>\n<li>除此之外，为了方便本地测试，项目增加了<code class=\"language-text\">test()</code>方法，模拟API网关传递的数据：</li>\n</ul>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"44867500026593300000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`def test():\n    with open(&quot;test.png&quot;, 'rb') as f:\n        image = f.read()\n        image_base64 = str(base64.b64encode(image), encoding='utf-8')\n    event = {\n        &quot;requestContext&quot;: {\n            &quot;serviceId&quot;: &quot;service-f94sy04v&quot;,\n            &quot;path&quot;: &quot;/test/{path}&quot;,\n            &quot;httpMethod&quot;: &quot;POST&quot;,\n            &quot;requestId&quot;: &quot;c6af9ac6-7b61-11e6-9a41-93e8deadbeef&quot;,\n            &quot;identity&quot;: {\n                &quot;secretId&quot;: &quot;abdcdxxxxxxxsdfs&quot;\n            },\n            &quot;sourceIp&quot;: &quot;14.17.22.34&quot;,\n            &quot;stage&quot;: &quot;release&quot;\n        },\n        &quot;headers&quot;: {\n            &quot;Accept-Language&quot;: &quot;en-US,en,cn&quot;,\n            &quot;Accept&quot;: &quot;text/html,application/xml,application/json&quot;,\n            &quot;Host&quot;: &quot;service-3ei3tii4-251000691.ap-guangzhou.apigateway.myqloud.com&quot;,\n            &quot;User-Agent&quot;: &quot;User Agent String&quot;\n        },\n        &quot;body&quot;: &quot;{\\&quot;pic\\&quot;:\\&quot;%s\\&quot;, \\&quot;base\\&quot;:\\&quot;1\\&quot;}&quot; % image_base64,\n        &quot;pathParameters&quot;: {\n            &quot;path&quot;: &quot;value&quot;\n        },\n        &quot;queryStringParameters&quot;: {\n            &quot;foo&quot;: &quot;bar&quot;\n        },\n        &quot;headerParameters&quot;: {\n            &quot;Refer&quot;: &quot;10.0.2.14&quot;\n        },\n        &quot;stageVariables&quot;: {\n            &quot;stage&quot;: &quot;release&quot;\n        },\n        &quot;path&quot;: &quot;/test/value&quot;,\n        &quot;queryString&quot;: {\n            &quot;foo&quot;: &quot;bar&quot;,\n            &quot;bob&quot;: &quot;alice&quot;\n        },\n        &quot;httpMethod&quot;: &quot;POST&quot;\n    }\n    print(main_handler(event, None))\n\n\nif __name__ == &quot;__main__&quot;:\n    test()`, `44867500026593300000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">test</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"test.png\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'rb'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n        image <span class=\"token operator\">=</span> f<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        image_base64 <span class=\"token operator\">=</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>base64<span class=\"token punctuation\">.</span>b64encode<span class=\"token punctuation\">(</span>image<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> encoding<span class=\"token operator\">=</span><span class=\"token string\">'utf-8'</span><span class=\"token punctuation\">)</span>\n    event <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token string\">\"requestContext\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"serviceId\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"service-f94sy04v\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"path\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"/test/{path}\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"httpMethod\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"POST\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"requestId\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"c6af9ac6-7b61-11e6-9a41-93e8deadbeef\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"identity\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token string\">\"secretId\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"abdcdxxxxxxxsdfs\"</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"sourceIp\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"14.17.22.34\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"stage\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"release\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"headers\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"Accept-Language\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"en-US,en,cn\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"Accept\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"text/html,application/xml,application/json\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"Host\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"service-3ei3tii4-251000691.ap-guangzhou.apigateway.myqloud.com\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"User-Agent\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"User Agent String\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"body\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"{\\\"pic\\\":\\\"%s\\\", \\\"base\\\":\\\"1\\\"}\"</span> <span class=\"token operator\">%</span> image_base64<span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"pathParameters\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"path\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"value\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"queryStringParameters\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"foo\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"bar\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"headerParameters\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"Refer\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"10.0.2.14\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"stageVariables\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"stage\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"release\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"path\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"/test/value\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"queryString\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"foo\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"bar\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token string\">\"bob\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"alice\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"httpMethod\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"POST\"</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>main_handler<span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">,</span> <span class=\"token boolean\">None</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n\n<span class=\"token keyword\">if</span> __name__ <span class=\"token operator\">==</span> <span class=\"token string\">\"__main__\"</span><span class=\"token punctuation\">:</span>\n    test<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>为了让函数更有同一个返回规范，此处增加统一返回的函数：</li>\n</ul>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"40960408037990520000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`def return_msg(error, msg):\n    return_data = {\n        &quot;uuid&quot;: str(uuid.uuid1()),\n        &quot;error&quot;: error,\n        &quot;message&quot;: msg\n    }\n    print(return_data)\n    return return_data`, `40960408037990520000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">return_msg</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">,</span> msg<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    return_data <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token string\">\"uuid\"</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>uuid<span class=\"token punctuation\">.</span>uuid1<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"error\"</span><span class=\"token punctuation\">:</span> error<span class=\"token punctuation\">,</span>\n        <span class=\"token string\">\"message\"</span><span class=\"token punctuation\">:</span> msg\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>return_data<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> return_data</code></pre></div>\n<ul>\n<li>最后就是函数中涂口函数的写法：</li>\n</ul>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"41636649823055815000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import base64, json\nfrom PIL import Image\nimport uuid\n\n\ndef main_handler(event, context):\n    try:\n        print(&quot;将接收到的base64图像转为pic&quot;)\n        imgData = base64.b64decode(json.loads(event[&quot;body&quot;])[&quot;pic&quot;].split(&quot;base64,&quot;)[1])\n        with open('/tmp/picture.png', 'wb') as f:\n            f.write(imgData)\n\n        basePic = json.loads(event[&quot;body&quot;])[&quot;base&quot;]\n        addResult = add_decorate(basePic)\n        if addResult:\n            with open(&quot;/tmp/output.png&quot;, &quot;rb&quot;) as f:\n                base64Data = str(base64.b64encode(f.read()), encoding='utf-8')\n            return return_msg(False, {&quot;picture&quot;: base64Data})\n        else:\n            return return_msg(True, &quot;饰品添加失败&quot;)\n    except Exception as e:\n        return return_msg(True, &quot;数据处理异常： %s&quot; % str(e))`, `41636649823055815000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> base64<span class=\"token punctuation\">,</span> json\n<span class=\"token keyword\">from</span> PIL <span class=\"token keyword\">import</span> Image\n<span class=\"token keyword\">import</span> uuid\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">main_handler</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">,</span> context<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">try</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"将接收到的base64图像转为pic\"</span><span class=\"token punctuation\">)</span>\n        imgData <span class=\"token operator\">=</span> base64<span class=\"token punctuation\">.</span>b64decode<span class=\"token punctuation\">(</span>json<span class=\"token punctuation\">.</span>loads<span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">[</span><span class=\"token string\">\"body\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"pic\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token string\">\"base64,\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/tmp/picture.png'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'wb'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n            f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span>imgData<span class=\"token punctuation\">)</span>\n\n        basePic <span class=\"token operator\">=</span> json<span class=\"token punctuation\">.</span>loads<span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">[</span><span class=\"token string\">\"body\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"base\"</span><span class=\"token punctuation\">]</span>\n        addResult <span class=\"token operator\">=</span> add_decorate<span class=\"token punctuation\">(</span>basePic<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> addResult<span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/tmp/output.png\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"rb\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n                base64Data <span class=\"token operator\">=</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>base64<span class=\"token punctuation\">.</span>b64encode<span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> encoding<span class=\"token operator\">=</span><span class=\"token string\">'utf-8'</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">return</span> return_msg<span class=\"token punctuation\">(</span><span class=\"token boolean\">False</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"picture\"</span><span class=\"token punctuation\">:</span> base64Data<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">return</span> return_msg<span class=\"token punctuation\">(</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"饰品添加失败\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">except</span> Exception <span class=\"token keyword\">as</span> e<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> return_msg<span class=\"token punctuation\">(</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"数据处理异常： %s\"</span> <span class=\"token operator\">%</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>完成后端图像合成功能，可以制作前端页面：</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"86849974004891500000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`<!DOCTYPE html>\n<html lang=&quot;en&quot;>\n<head>\n    <meta charset=&quot;UTF-8&quot;>\n    <title>2020头像大变样 - 头像SHOW - 自豪的采用腾讯云Serverless架构！</title>\n    <meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no&quot;>\n    <meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot;>\n    <meta name=&quot;apple-mobile-web-app-status-bar-style&quot; content=&quot;black&quot;>\n    <script type=&quot;text/javascript&quot;>\n        thisPic = null\n        function getFileUrl(sourceId) {\n            var url;\n            thisPic = document.getElementById(sourceId).files.item(0)\n            if (navigator.userAgent.indexOf(&quot;MSIE&quot;) >= 1) { // IE\n                url = document.getElementById(sourceId).value;\n            } else if (navigator.userAgent.indexOf(&quot;Firefox&quot;) > 0) { // Firefox\n                url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));\n            } else if (navigator.userAgent.indexOf(&quot;Chrome&quot;) > 0) { // Chrome\n                url = window.URL.createObjectURL(document.getElementById(sourceId).files.item(0));\n            }\n            return url;\n        }\n        function preImg(sourceId, targetId) {\n            var url = getFileUrl(sourceId);\n            var imgPre = document.getElementById(targetId);\n            imgPre.aaaaaa = url;\n            imgPre.style = &quot;display: block;&quot;;\n        }\n        function clickChose() {\n            document.getElementById(&quot;imgOne&quot;).click()\n        }\n        function getNewPhoto() {\n            document.getElementById(&quot;result&quot;).innerText = &quot;系统处理中，请稍后...&quot;\n            var oFReader = new FileReader();\n            oFReader.readAsDataURL(thisPic);\n            oFReader.onload = function (oFREvent) {\n                var xmlhttp;\n                if (window.XMLHttpRequest) {\n                    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码\n                    xmlhttp = new XMLHttpRequest();\n                } else {\n                    // IE6, IE5 浏览器执行代码\n                    xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);\n                }\n                xmlhttp.onreadystatechange = function () {\n                    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n                        if (JSON.parse(xmlhttp.responseText)[&quot;error&quot;]) {\n                            document.getElementById(&quot;result&quot;).innerText = JSON.parse(xmlhttp.responseText)[&quot;message&quot;];\n                        } else {\n                            document.getElementById(&quot;result&quot;).innerText = &quot;长按保存图像&quot;;\n                            document.getElementById(&quot;new_photo&quot;).aaaaaa = &quot;data:image/png;base64,&quot; + JSON.parse(xmlhttp.responseText)[&quot;message&quot;][&quot;picture&quot;];\n                            document.getElementById(&quot;new_photo&quot;).style = &quot;display: block;&quot;;\n                        }\n                    }\n                }\n                var url = &quot; http://service-8d3fi753-1256773370.bj.apigw.tencentcs.com/release/new_year_add_photo_decorate&quot;\n                var obj = document.getElementsByName(&quot;base&quot;);\n                var baseNum = &quot;1&quot;\n                for (var i = 0; i < obj.length; i++) {\n                    console.log(obj[i].checked)\n                    if (obj[i].checked) {\n                        baseNum = obj[i].value;\n                    }\n                }\n                xmlhttp.open(&quot;POST&quot;, url, true);\n                xmlhttp.setRequestHeader(&quot;Content-type&quot;, &quot;application/json&quot;);\n                var postData = {\n                    pic: oFREvent.target.result,\n                    base: baseNum\n                }\n                xmlhttp.send(JSON.stringify(postData));\n            }\n        }\n    </script>\n    <!--标准mui.css-->\n    <link rel=&quot;stylesheet&quot; href=&quot;./css/mui.min.css&quot;>\n</head>\n<body>\n<h3 style=&quot;text-align: center; margin-top: 30px&quot;>2020头像SHOW</h3>\n<div class=&quot;mui-card&quot;>\n    <div class=&quot;mui-card-content&quot;>\n        <div class=&quot;mui-card-content-inner&quot;>\n            第一步：选择一个你喜欢的图片\n        </div>\n    </div>\n    <div class=&quot;mui-content&quot;>\n        <ul class=&quot;mui-table-view mui-grid-view mui-grid-9&quot;>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/1.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;1&quot; checked></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/2.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;2&quot;></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/11.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;11&quot;></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/4.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;4&quot;></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/5.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;5&quot;></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/6.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;6&quot;></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/12.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;12&quot;></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/8.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;8&quot;></label></li>\n            <li class=&quot;mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3&quot;><label>\n                <img aaaaaa=&quot;./base/3.png&quot; width=&quot;100%&quot;><input type=&quot;radio&quot; name=&quot;base&quot; value=&quot;3&quot;></label></li>\n        </ul>\n    </div>\n</div>\n<div class=&quot;mui-card&quot;>\n    <div class=&quot;mui-card-content&quot;>\n        <div class=&quot;mui-card-content-inner&quot;>\n            第二步：上传一张你的头像\n        </div>\n        <div>\n            <form>\n                <input type=&quot;file&quot; name=&quot;imgOne&quot; id=&quot;imgOne&quot; onchange=&quot;preImg(this.id, 'photo')&quot; style=&quot;display: none;&quot;\n                       accept=&quot;image/*&quot;>\n                <center style=&quot;margin-bottom: 10px&quot;>\n                    <input type=&quot;button&quot; value=&quot;点击此处上传头像&quot; onclick=&quot;clickChose()&quot;/>\n                    <img id=&quot;photo&quot; aaaaaa=&quot;&quot; width=&quot;300px&quot; , height=&quot;300px&quot; style=&quot;display: none;&quot;/>\n                </center>\n            </form>\n        </div>\n    </div>\n</div>\n<div class=&quot;mui-card&quot;>\n    <div class=&quot;mui-card-content&quot;>\n        <div class=&quot;mui-card-content-inner&quot;>\n            第三步：点击生成按钮获取新年头像\n        </div>\n        <div>\n            <center style=&quot;margin-bottom: 10px&quot;>\n                <input type=&quot;button&quot; value=&quot;生成新年头像&quot; onclick=&quot;getNewPhoto()&quot;/>\n                <p id=&quot;result&quot;></p>\n                <img id=&quot;new_photo&quot; aaaaaa=&quot;&quot; width=&quot;300px&quot; , height=&quot;300px&quot; style=&quot;display: none;&quot;/>\n            </center>\n        </div>\n    </div>\n</div>\n<p style=&quot;text-align: center&quot;>\n    本项目自豪的<br>通过Serverless Framework<br>搭建在腾讯云SCF上\n</p>\n</body>\n</html>`, `86849974004891500000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token doctype\">&lt;!DOCTYPE html></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>html</span> <span class=\"token attr-name\">lang</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>en<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>head</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">charset</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>UTF-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>title</span><span class=\"token punctuation\">></span></span>2020头像大变样 - 头像SHOW - 自豪的采用腾讯云Serverless架构！<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>title</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>viewport<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>apple-mobile-web-app-capable<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>yes<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>meta</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>apple-mobile-web-app-status-bar-style<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">content</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>black<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n        thisPic <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span>\n        <span class=\"token keyword\">function</span> <span class=\"token function\">getFileUrl</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sourceId</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">var</span> url<span class=\"token punctuation\">;</span>\n            thisPic <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span>sourceId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>files<span class=\"token punctuation\">.</span><span class=\"token function\">item</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>navigator<span class=\"token punctuation\">.</span>userAgent<span class=\"token punctuation\">.</span><span class=\"token function\">indexOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"MSIE\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">>=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// IE</span>\n                url <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span>sourceId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>navigator<span class=\"token punctuation\">.</span>userAgent<span class=\"token punctuation\">.</span><span class=\"token function\">indexOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Firefox\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// Firefox</span>\n                url <span class=\"token operator\">=</span> window<span class=\"token punctuation\">.</span><span class=\"token constant\">URL</span><span class=\"token punctuation\">.</span><span class=\"token function\">createObjectURL</span><span class=\"token punctuation\">(</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span>sourceId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>files<span class=\"token punctuation\">.</span><span class=\"token function\">item</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>navigator<span class=\"token punctuation\">.</span>userAgent<span class=\"token punctuation\">.</span><span class=\"token function\">indexOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Chrome\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">// Chrome</span>\n                url <span class=\"token operator\">=</span> window<span class=\"token punctuation\">.</span><span class=\"token constant\">URL</span><span class=\"token punctuation\">.</span><span class=\"token function\">createObjectURL</span><span class=\"token punctuation\">(</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span>sourceId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>files<span class=\"token punctuation\">.</span><span class=\"token function\">item</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            <span class=\"token keyword\">return</span> url<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">function</span> <span class=\"token function\">preImg</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sourceId<span class=\"token punctuation\">,</span> targetId</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">var</span> url <span class=\"token operator\">=</span> <span class=\"token function\">getFileUrl</span><span class=\"token punctuation\">(</span>sourceId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">var</span> imgPre <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span>targetId<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            imgPre<span class=\"token punctuation\">.</span>aaaaaa <span class=\"token operator\">=</span> url<span class=\"token punctuation\">;</span>\n            imgPre<span class=\"token punctuation\">.</span>style <span class=\"token operator\">=</span> <span class=\"token string\">\"display: block;\"</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">function</span> <span class=\"token function\">clickChose</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"imgOne\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">click</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">function</span> <span class=\"token function\">getNewPhoto</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"result\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>innerText <span class=\"token operator\">=</span> <span class=\"token string\">\"系统处理中，请稍后...\"</span>\n            <span class=\"token keyword\">var</span> oFReader <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">FileReader</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            oFReader<span class=\"token punctuation\">.</span><span class=\"token function\">readAsDataURL</span><span class=\"token punctuation\">(</span>thisPic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            oFReader<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onload</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">oFREvent</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">var</span> xmlhttp<span class=\"token punctuation\">;</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>window<span class=\"token punctuation\">.</span>XMLHttpRequest<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token comment\">// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码</span>\n                    xmlhttp <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">XMLHttpRequest</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token comment\">// IE6, IE5 浏览器执行代码</span>\n                    xmlhttp <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ActiveXObject</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Microsoft.XMLHTTP\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n                xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onreadystatechange</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>xmlhttp<span class=\"token punctuation\">.</span>readyState <span class=\"token operator\">==</span> <span class=\"token number\">4</span> <span class=\"token operator\">&amp;&amp;</span> xmlhttp<span class=\"token punctuation\">.</span>status <span class=\"token operator\">==</span> <span class=\"token number\">200</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>xmlhttp<span class=\"token punctuation\">.</span>responseText<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"error\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                            document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"result\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>innerText <span class=\"token operator\">=</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>xmlhttp<span class=\"token punctuation\">.</span>responseText<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"message\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n                        <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n                            document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"result\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>innerText <span class=\"token operator\">=</span> <span class=\"token string\">\"长按保存图像\"</span><span class=\"token punctuation\">;</span>\n                            document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"new_photo\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>aaaaaa <span class=\"token operator\">=</span> <span class=\"token string\">\"data:image/png;base64,\"</span> <span class=\"token operator\">+</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>xmlhttp<span class=\"token punctuation\">.</span>responseText<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"message\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"picture\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n                            document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"new_photo\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>style <span class=\"token operator\">=</span> <span class=\"token string\">\"display: block;\"</span><span class=\"token punctuation\">;</span>\n                        <span class=\"token punctuation\">}</span>\n                    <span class=\"token punctuation\">}</span>\n                <span class=\"token punctuation\">}</span>\n                <span class=\"token keyword\">var</span> url <span class=\"token operator\">=</span> <span class=\"token string\">\" http://service-8d3fi753-1256773370.bj.apigw.tencentcs.com/release/new_year_add_photo_decorate\"</span>\n                <span class=\"token keyword\">var</span> obj <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementsByName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"base\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token keyword\">var</span> baseNum <span class=\"token operator\">=</span> <span class=\"token string\">\"1\"</span>\n                <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">var</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> obj<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>obj<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>checked<span class=\"token punctuation\">)</span>\n                    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>obj<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>checked<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        baseNum <span class=\"token operator\">=</span> obj<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">;</span>\n                    <span class=\"token punctuation\">}</span>\n                <span class=\"token punctuation\">}</span>\n                xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"POST\"</span><span class=\"token punctuation\">,</span> url<span class=\"token punctuation\">,</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function\">setRequestHeader</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Content-type\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"application/json\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token keyword\">var</span> postData <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n                    pic<span class=\"token punctuation\">:</span> oFREvent<span class=\"token punctuation\">.</span>target<span class=\"token punctuation\">.</span>result<span class=\"token punctuation\">,</span>\n                    base<span class=\"token punctuation\">:</span> baseNum\n                <span class=\"token punctuation\">}</span>\n                xmlhttp<span class=\"token punctuation\">.</span><span class=\"token function\">send</span><span class=\"token punctuation\">(</span><span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>postData<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n    </span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token comment\">&lt;!--标准mui.css--></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span> <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>stylesheet<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./css/mui.min.css<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>head</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>body</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h3</span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span> <span class=\"token property\">margin-top</span><span class=\"token punctuation\">:</span> 30px</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>2020头像SHOW<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h3</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content-inner<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            第一步：选择一个你喜欢的图片\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view mui-grid-view mui-grid-9<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/1.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>1<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">checked</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/2.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>2<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/11.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>11<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/4.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>4<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/5.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>5<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/6.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>6<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/12.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>12<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/8.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>./base/3.png<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>100%<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>radio<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>base<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>3<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content-inner<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            第二步：上传一张你的头像\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>form</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>file<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>imgOne<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>imgOne<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onchange</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>preImg(this.id, 'photo')<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span></span><span class=\"token punctuation\">\"</span></span>\n                       <span class=\"token attr-name\">accept</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>image/*<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>center</span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">margin-bottom</span><span class=\"token punctuation\">:</span> 10px</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>点击此处上传头像<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onclick</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>clickChose()<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n                    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>photo<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>300px<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">,</span> <span class=\"token attr-name\">height</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>300px<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>center</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>form</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mui-card-content-inner<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n            第三步：点击生成按钮获取新年头像\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>center</span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">margin-bottom</span><span class=\"token punctuation\">:</span> 10px</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>button<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">value</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>生成新年头像<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">onclick</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>getNewPhoto()<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>result<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n                <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>new_photo<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">aaaaaa</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span><span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">width</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>300px<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">,</span> <span class=\"token attr-name\">height</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>300px<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">display</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span></span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">/></span></span>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>center</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token style-attr language-css\"><span class=\"token attr-name\"> <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center</span><span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    本项目自豪的<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>br</span><span class=\"token punctuation\">></span></span>通过Serverless Framework<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>br</span><span class=\"token punctuation\">></span></span>搭建在腾讯云SCF上\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>body</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>html</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>完成之后：</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"53149022659035650000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`new_year_add_photo_decorate:\n  component: &quot;@serverless/tencent-scf&quot;\n  inputs:\n    name: myapi_new_year_add_photo_decorate\n    codeUri: ./new_year_add_photo_decorate\n    handler: index.main_handler\n    runtime: Python3.6\n    region: ap-beijing\n    description: 新年为头像增加饰品\n    memorySize: 128\n    timeout: 5\n    events:\n      - apigw:\n          name: serverless\n          parameters:\n            serviceId: service-8d3fi753\n            environment: release\n            endpoints:\n              - path: /new_year_add_photo_decorate\n                description: 新年为头像增加饰品\n                method: POST\n                enableCORS: true\n                param:\n                  - name: pic\n                    position: BODY\n                    required: 'FALSE'\n                    type: string\n                    desc: 原始图片\n                  - name: base\n                    position: BODY\n                    required: 'FALSE'\n                    type: string\n                    desc: 饰品ID\n\nmyWebsite:\n  component: '@serverless/tencent-website'\n  inputs:\n    code:\n      src: ./new_year_add_photo_decorate/web\n      index: index.html\n      error: index.html\n    region: ap-beijing\n    bucketName: new-year-add-photo-decorate`, `53149022659035650000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">new_year_add_photo_decorate</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">component</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"@serverless/tencent-scf\"</span>\n  <span class=\"token key atrule\">inputs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> myapi_new_year_add_photo_decorate\n    <span class=\"token key atrule\">codeUri</span><span class=\"token punctuation\">:</span> ./new_year_add_photo_decorate\n    <span class=\"token key atrule\">handler</span><span class=\"token punctuation\">:</span> index.main_handler\n    <span class=\"token key atrule\">runtime</span><span class=\"token punctuation\">:</span> Python3.6\n    <span class=\"token key atrule\">region</span><span class=\"token punctuation\">:</span> ap<span class=\"token punctuation\">-</span>beijing\n    <span class=\"token key atrule\">description</span><span class=\"token punctuation\">:</span> 新年为头像增加饰品\n    <span class=\"token key atrule\">memorySize</span><span class=\"token punctuation\">:</span> <span class=\"token number\">128</span>\n    <span class=\"token key atrule\">timeout</span><span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n    <span class=\"token key atrule\">events</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">apigw</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> serverless\n          <span class=\"token key atrule\">parameters</span><span class=\"token punctuation\">:</span>\n            <span class=\"token key atrule\">serviceId</span><span class=\"token punctuation\">:</span> service<span class=\"token punctuation\">-</span>8d3fi753\n            <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span> release\n            <span class=\"token key atrule\">endpoints</span><span class=\"token punctuation\">:</span>\n              <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">path</span><span class=\"token punctuation\">:</span> /new_year_add_photo_decorate\n                <span class=\"token key atrule\">description</span><span class=\"token punctuation\">:</span> 新年为头像增加饰品\n                <span class=\"token key atrule\">method</span><span class=\"token punctuation\">:</span> POST\n                <span class=\"token key atrule\">enableCORS</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n                <span class=\"token key atrule\">param</span><span class=\"token punctuation\">:</span>\n                  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> pic\n                    <span class=\"token key atrule\">position</span><span class=\"token punctuation\">:</span> BODY\n                    <span class=\"token key atrule\">required</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'FALSE'</span>\n                    <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> string\n                    <span class=\"token key atrule\">desc</span><span class=\"token punctuation\">:</span> 原始图片\n                  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> base\n                    <span class=\"token key atrule\">position</span><span class=\"token punctuation\">:</span> BODY\n                    <span class=\"token key atrule\">required</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'FALSE'</span>\n                    <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> string\n                    <span class=\"token key atrule\">desc</span><span class=\"token punctuation\">:</span> 饰品ID\n\n<span class=\"token key atrule\">myWebsite</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">component</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'@serverless/tencent-website'</span>\n  <span class=\"token key atrule\">inputs</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">code</span><span class=\"token punctuation\">:</span>\n      <span class=\"token key atrule\">src</span><span class=\"token punctuation\">:</span> ./new_year_add_photo_decorate/web\n      <span class=\"token key atrule\">index</span><span class=\"token punctuation\">:</span> index.html\n      <span class=\"token key atrule\">error</span><span class=\"token punctuation\">:</span> index.html\n    <span class=\"token key atrule\">region</span><span class=\"token punctuation\">:</span> ap<span class=\"token punctuation\">-</span>beijing\n    <span class=\"token key atrule\">bucketName</span><span class=\"token punctuation\">:</span> new<span class=\"token punctuation\">-</span>year<span class=\"token punctuation\">-</span>add<span class=\"token punctuation\">-</span>photo<span class=\"token punctuation\">-</span>decorate</code></pre></div>\n<p>完成之后就可以实现头像加装饰的功能，效果如下：</p>\n<p><img src=\"https://img.serverlesscloud.cn/202058/2-10-1.png\"></p>\n<h2 id=\"serverless与人工智能联手增加头像装饰\"><a href=\"#serverless%E4%B8%8E%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%81%94%E6%89%8B%E5%A2%9E%E5%8A%A0%E5%A4%B4%E5%83%8F%E8%A3%85%E9%A5%B0\" aria-label=\"serverless与人工智能联手增加头像装饰 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Serverless与人工智能联手增加头像装饰</h2>\n<p>其实第一种直接加装饰的方法，是可以直接在前端来实现，可以不通过后端功能实现，既然用到了后端服务，用到了云函数，那么我们不防将人工智能的方法和Serverless架构结合，共同实现一个增加装饰的小工具，先进行一下效果的预览：</p>\n<p><img src=\"https://img.serverlesscloud.cn/202058/2-10-2.png\"></p>\n<p>这一功能的主要做法就是，通过人工智能算法(此处是通过Dlib实现)，进行人脸的检测：</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"54381422593569374000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`print(&quot;dlib人脸关键点检测器,正脸检测&quot;)\npredictorPath = &quot;shape_predictor_5_face_landmarks.dat&quot;\npredictor = dlib.shape_predictor(predictorPath)\ndetector = dlib.get_frontal_face_detector()\ndets = detector(img, 1)`, `54381422593569374000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dlib人脸关键点检测器,正脸检测\"</span><span class=\"token punctuation\">)</span>\npredictorPath <span class=\"token operator\">=</span> <span class=\"token string\">\"shape_predictor_5_face_landmarks.dat\"</span>\npredictor <span class=\"token operator\">=</span> dlib<span class=\"token punctuation\">.</span>shape_predictor<span class=\"token punctuation\">(</span>predictorPath<span class=\"token punctuation\">)</span>\ndetector <span class=\"token operator\">=</span> dlib<span class=\"token punctuation\">.</span>get_frontal_face_detector<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ndets <span class=\"token operator\">=</span> detector<span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>此处做法是，只检测一张脸，检测到即进行返回：</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"28839895351708190000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`for d in dets:\n    x, y, w, h = d.left(), d.top(), d.right() - d.left(), d.bottom() - d.top()\n\n    print(&quot;关键点检测，5个关键点&quot;)\n    shape = predictor(img, d)\n\n    print(&quot;选取左右眼眼角的点&quot;)\n    point1 = shape.part(0)\n    point2 = shape.part(2)\n\n    print(&quot;求两点中心&quot;)\n    eyes_center = ((point1.x + point2.x) // 2, (point1.y + point2.y) // 2)\n\n    print(&quot;根据人脸大小调整帽子大小&quot;)\n    factor = 1.5\n    resizedHatH = int(round(rgbHat.shape[0] * w / rgbHat.shape[1] * factor))\n    resizedHatW = int(round(rgbHat.shape[1] * w / rgbHat.shape[1] * factor))\n\n    if resizedHatH > y:\n        resizedHatH = y - 1\n\n    print(&quot;根据人脸大小调整帽子大小&quot;)\n    resizedHat = cv2.resize(rgbHat, (resizedHatW, resizedHatH))\n\n    print(&quot;用alpha通道作为mask&quot;)\n    mask = cv2.resize(a, (resizedHatW, resizedHatH))\n    maskInv = cv2.bitwise_not(mask)\n\n    print(&quot;帽子相对与人脸框上线的偏移量&quot;)\n    dh = 0\n    bgRoi = img[y + dh - resizedHatH:y + dh,\n            (eyes_center[0] - resizedHatW // 3):(eyes_center[0] + resizedHatW // 3 * 2)]\n\n    print(&quot;原图ROI中提取放帽子的区域&quot;)\n    bgRoi = bgRoi.astype(float)\n    maskInv = cv2.merge((maskInv, maskInv, maskInv))\n    alpha = maskInv.astype(float) / 255\n\n    print(&quot;相乘之前保证两者大小一致（可能会由于四舍五入原因不一致）&quot;)\n    alpha = cv2.resize(alpha, (bgRoi.shape[1], bgRoi.shape[0]))\n    bg = cv2.multiply(alpha, bgRoi)\n    bg = bg.astype('uint8')\n\n    print(&quot;提取帽子区域&quot;)\n    hat = cv2.bitwise_and(resizedHat, cv2.bitwise_not(maskInv))\n\n    print(&quot;相加之前保证两者大小一致（可能会由于四舍五入原因不一致）&quot;)\n    hat = cv2.resize(hat, (bgRoi.shape[1], bgRoi.shape[0]))\n    print(&quot;两个ROI区域相加&quot;)\n    addHat = cv2.add(bg, hat)\n\n    print(&quot;把添加好帽子的区域放回原图&quot;)\n    img[y + dh - resizedHatH:y + dh,\n    (eyes_center[0] - resizedHatW // 3):(eyes_center[0] + resizedHatW // 3 * 2)] = addHat\n\n    return img`, `28839895351708190000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">for</span> d <span class=\"token keyword\">in</span> dets<span class=\"token punctuation\">:</span>\n    x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> w<span class=\"token punctuation\">,</span> h <span class=\"token operator\">=</span> d<span class=\"token punctuation\">.</span>left<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">.</span>top<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">.</span>right<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> d<span class=\"token punctuation\">.</span>left<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">.</span>bottom<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> d<span class=\"token punctuation\">.</span>top<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"关键点检测，5个关键点\"</span><span class=\"token punctuation\">)</span>\n    shape <span class=\"token operator\">=</span> predictor<span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"选取左右眼眼角的点\"</span><span class=\"token punctuation\">)</span>\n    point1 <span class=\"token operator\">=</span> shape<span class=\"token punctuation\">.</span>part<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n    point2 <span class=\"token operator\">=</span> shape<span class=\"token punctuation\">.</span>part<span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"求两点中心\"</span><span class=\"token punctuation\">)</span>\n    eyes_center <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>point1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">+</span> point2<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">//</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>point1<span class=\"token punctuation\">.</span>y <span class=\"token operator\">+</span> point2<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span> <span class=\"token operator\">//</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"根据人脸大小调整帽子大小\"</span><span class=\"token punctuation\">)</span>\n    factor <span class=\"token operator\">=</span> <span class=\"token number\">1.5</span>\n    resizedHatH <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> w <span class=\"token operator\">/</span> rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> factor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    resizedHatW <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> w <span class=\"token operator\">/</span> rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> factor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">if</span> resizedHatH <span class=\"token operator\">></span> y<span class=\"token punctuation\">:</span>\n        resizedHatH <span class=\"token operator\">=</span> y <span class=\"token operator\">-</span> <span class=\"token number\">1</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"根据人脸大小调整帽子大小\"</span><span class=\"token punctuation\">)</span>\n    resizedHat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>rgbHat<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>resizedHatW<span class=\"token punctuation\">,</span> resizedHatH<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"用alpha通道作为mask\"</span><span class=\"token punctuation\">)</span>\n    mask <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>resizedHatW<span class=\"token punctuation\">,</span> resizedHatH<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    maskInv <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>bitwise_not<span class=\"token punctuation\">(</span>mask<span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"帽子相对与人脸框上线的偏移量\"</span><span class=\"token punctuation\">)</span>\n    dh <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n    bgRoi <span class=\"token operator\">=</span> img<span class=\"token punctuation\">[</span>y <span class=\"token operator\">+</span> dh <span class=\"token operator\">-</span> resizedHatH<span class=\"token punctuation\">:</span>y <span class=\"token operator\">+</span> dh<span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span> <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"原图ROI中提取放帽子的区域\"</span><span class=\"token punctuation\">)</span>\n    bgRoi <span class=\"token operator\">=</span> bgRoi<span class=\"token punctuation\">.</span>astype<span class=\"token punctuation\">(</span><span class=\"token builtin\">float</span><span class=\"token punctuation\">)</span>\n    maskInv <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>merge<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>maskInv<span class=\"token punctuation\">,</span> maskInv<span class=\"token punctuation\">,</span> maskInv<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    alpha <span class=\"token operator\">=</span> maskInv<span class=\"token punctuation\">.</span>astype<span class=\"token punctuation\">(</span><span class=\"token builtin\">float</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token number\">255</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"相乘之前保证两者大小一致（可能会由于四舍五入原因不一致）\"</span><span class=\"token punctuation\">)</span>\n    alpha <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>alpha<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    bg <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>multiply<span class=\"token punctuation\">(</span>alpha<span class=\"token punctuation\">,</span> bgRoi<span class=\"token punctuation\">)</span>\n    bg <span class=\"token operator\">=</span> bg<span class=\"token punctuation\">.</span>astype<span class=\"token punctuation\">(</span><span class=\"token string\">'uint8'</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"提取帽子区域\"</span><span class=\"token punctuation\">)</span>\n    hat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>bitwise_and<span class=\"token punctuation\">(</span>resizedHat<span class=\"token punctuation\">,</span> cv2<span class=\"token punctuation\">.</span>bitwise_not<span class=\"token punctuation\">(</span>maskInv<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"相加之前保证两者大小一致（可能会由于四舍五入原因不一致）\"</span><span class=\"token punctuation\">)</span>\n    hat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>hat<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"两个ROI区域相加\"</span><span class=\"token punctuation\">)</span>\n    addHat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>bg<span class=\"token punctuation\">,</span> hat<span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"把添加好帽子的区域放回原图\"</span><span class=\"token punctuation\">)</span>\n    img<span class=\"token punctuation\">[</span>y <span class=\"token operator\">+</span> dh <span class=\"token operator\">-</span> resizedHatH<span class=\"token punctuation\">:</span>y <span class=\"token operator\">+</span> dh<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span> <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> addHat\n\n    <span class=\"token keyword\">return</span> img</code></pre></div>\n<p>在Serverless架构下的完整代码：</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"63843404000036960000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import cv2\nimport dlib\nimport base64\nimport json\n\n\ndef addHat(img, hat_img):\n    print(&quot;分离rgba通道，合成rgb三通道帽子图，a通道后面做mask用&quot;)\n    r, g, b, a = cv2.split(hat_img)\n    rgbHat = cv2.merge((r, g, b))\n\n    print(&quot;dlib人脸关键点检测器,正脸检测&quot;)\n    predictorPath = &quot;shape_predictor_5_face_landmarks.dat&quot;\n    predictor = dlib.shape_predictor(predictorPath)\n    detector = dlib.get_frontal_face_detector()\n    dets = detector(img, 1)\n\n    print(&quot;如果检测到人脸&quot;)\n    if len(dets) > 0:\n        for d in dets:\n            x, y, w, h = d.left(), d.top(), d.right() - d.left(), d.bottom() - d.top()\n\n            print(&quot;关键点检测，5个关键点&quot;)\n            shape = predictor(img, d)\n\n            print(&quot;选取左右眼眼角的点&quot;)\n            point1 = shape.part(0)\n            point2 = shape.part(2)\n\n            print(&quot;求两点中心&quot;)\n            eyes_center = ((point1.x + point2.x) // 2, (point1.y + point2.y) // 2)\n\n            print(&quot;根据人脸大小调整帽子大小&quot;)\n            factor = 1.5\n            resizedHatH = int(round(rgbHat.shape[0] * w / rgbHat.shape[1] * factor))\n            resizedHatW = int(round(rgbHat.shape[1] * w / rgbHat.shape[1] * factor))\n\n            if resizedHatH > y:\n                resizedHatH = y - 1\n\n            print(&quot;根据人脸大小调整帽子大小&quot;)\n            resizedHat = cv2.resize(rgbHat, (resizedHatW, resizedHatH))\n\n            print(&quot;用alpha通道作为mask&quot;)\n            mask = cv2.resize(a, (resizedHatW, resizedHatH))\n            maskInv = cv2.bitwise_not(mask)\n\n            print(&quot;帽子相对与人脸框上线的偏移量&quot;)\n            dh = 0\n            bgRoi = img[y + dh - resizedHatH:y + dh,\n                    (eyes_center[0] - resizedHatW // 3):(eyes_center[0] + resizedHatW // 3 * 2)]\n\n            print(&quot;原图ROI中提取放帽子的区域&quot;)\n            bgRoi = bgRoi.astype(float)\n            maskInv = cv2.merge((maskInv, maskInv, maskInv))\n            alpha = maskInv.astype(float) / 255\n\n            print(&quot;相乘之前保证两者大小一致（可能会由于四舍五入原因不一致）&quot;)\n            alpha = cv2.resize(alpha, (bgRoi.shape[1], bgRoi.shape[0]))\n            bg = cv2.multiply(alpha, bgRoi)\n            bg = bg.astype('uint8')\n\n            print(&quot;提取帽子区域&quot;)\n            hat = cv2.bitwise_and(resizedHat, cv2.bitwise_not(maskInv))\n\n            print(&quot;相加之前保证两者大小一致（可能会由于四舍五入原因不一致）&quot;)\n            hat = cv2.resize(hat, (bgRoi.shape[1], bgRoi.shape[0]))\n            print(&quot;两个ROI区域相加&quot;)\n            addHat = cv2.add(bg, hat)\n\n            print(&quot;把添加好帽子的区域放回原图&quot;)\n            img[y + dh - resizedHatH:y + dh,\n            (eyes_center[0] - resizedHatW // 3):(eyes_center[0] + resizedHatW // 3 * 2)] = addHat\n\n            return img\n\n\ndef main_handler(event, context):\n    try:\n        print(&quot;将接收到的base64图像转为pic&quot;)\n        imgData = base64.b64decode(json.loads(event[&quot;body&quot;])[&quot;pic&quot;])\n        with open('/tmp/picture.png', 'wb') as f:\n            f.write(imgData)\n\n        print(&quot;读取帽子素材以及用户头像&quot;)\n        hatImg = cv2.imread(&quot;hat.png&quot;, -1)\n        userImg = cv2.imread(&quot;/tmp/picture.png&quot;)\n\n        output = addHat(userImg, hatImg)\n        cv2.imwrite(&quot;/tmp/output.jpg&quot;, output)\n\n        print(&quot;读取头像进行返回给用户，以Base64返回&quot;)\n        with open(&quot;/tmp/output.jpg&quot;, &quot;rb&quot;) as f:\n            base64Data =  str(base64.b64encode(f.read()), encoding='utf-8')\n\n        return {\n            &quot;picture&quot;: base64Data\n        }\n    except Exception as e:\n        return {\n            &quot;error&quot;: str(e)\n        }`, `63843404000036960000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> cv2\n<span class=\"token keyword\">import</span> dlib\n<span class=\"token keyword\">import</span> base64\n<span class=\"token keyword\">import</span> json\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">addHat</span><span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> hat_img<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"分离rgba通道，合成rgb三通道帽子图，a通道后面做mask用\"</span><span class=\"token punctuation\">)</span>\n    r<span class=\"token punctuation\">,</span> g<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">,</span> a <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span>hat_img<span class=\"token punctuation\">)</span>\n    rgbHat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>merge<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>r<span class=\"token punctuation\">,</span> g<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dlib人脸关键点检测器,正脸检测\"</span><span class=\"token punctuation\">)</span>\n    predictorPath <span class=\"token operator\">=</span> <span class=\"token string\">\"shape_predictor_5_face_landmarks.dat\"</span>\n    predictor <span class=\"token operator\">=</span> dlib<span class=\"token punctuation\">.</span>shape_predictor<span class=\"token punctuation\">(</span>predictorPath<span class=\"token punctuation\">)</span>\n    detector <span class=\"token operator\">=</span> dlib<span class=\"token punctuation\">.</span>get_frontal_face_detector<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    dets <span class=\"token operator\">=</span> detector<span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"如果检测到人脸\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>dets<span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> d <span class=\"token keyword\">in</span> dets<span class=\"token punctuation\">:</span>\n            x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">,</span> w<span class=\"token punctuation\">,</span> h <span class=\"token operator\">=</span> d<span class=\"token punctuation\">.</span>left<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">.</span>top<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">.</span>right<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> d<span class=\"token punctuation\">.</span>left<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">.</span>bottom<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> d<span class=\"token punctuation\">.</span>top<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"关键点检测，5个关键点\"</span><span class=\"token punctuation\">)</span>\n            shape <span class=\"token operator\">=</span> predictor<span class=\"token punctuation\">(</span>img<span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"选取左右眼眼角的点\"</span><span class=\"token punctuation\">)</span>\n            point1 <span class=\"token operator\">=</span> shape<span class=\"token punctuation\">.</span>part<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n            point2 <span class=\"token operator\">=</span> shape<span class=\"token punctuation\">.</span>part<span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"求两点中心\"</span><span class=\"token punctuation\">)</span>\n            eyes_center <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>point1<span class=\"token punctuation\">.</span>x <span class=\"token operator\">+</span> point2<span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">//</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>point1<span class=\"token punctuation\">.</span>y <span class=\"token operator\">+</span> point2<span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span> <span class=\"token operator\">//</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"根据人脸大小调整帽子大小\"</span><span class=\"token punctuation\">)</span>\n            factor <span class=\"token operator\">=</span> <span class=\"token number\">1.5</span>\n            resizedHatH <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> w <span class=\"token operator\">/</span> rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> factor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            resizedHatW <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">round</span><span class=\"token punctuation\">(</span>rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> w <span class=\"token operator\">/</span> rgbHat<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> factor<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">if</span> resizedHatH <span class=\"token operator\">></span> y<span class=\"token punctuation\">:</span>\n                resizedHatH <span class=\"token operator\">=</span> y <span class=\"token operator\">-</span> <span class=\"token number\">1</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"根据人脸大小调整帽子大小\"</span><span class=\"token punctuation\">)</span>\n            resizedHat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>rgbHat<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>resizedHatW<span class=\"token punctuation\">,</span> resizedHatH<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"用alpha通道作为mask\"</span><span class=\"token punctuation\">)</span>\n            mask <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>resizedHatW<span class=\"token punctuation\">,</span> resizedHatH<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            maskInv <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>bitwise_not<span class=\"token punctuation\">(</span>mask<span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"帽子相对与人脸框上线的偏移量\"</span><span class=\"token punctuation\">)</span>\n            dh <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n            bgRoi <span class=\"token operator\">=</span> img<span class=\"token punctuation\">[</span>y <span class=\"token operator\">+</span> dh <span class=\"token operator\">-</span> resizedHatH<span class=\"token punctuation\">:</span>y <span class=\"token operator\">+</span> dh<span class=\"token punctuation\">,</span>\n                    <span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span> <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"原图ROI中提取放帽子的区域\"</span><span class=\"token punctuation\">)</span>\n            bgRoi <span class=\"token operator\">=</span> bgRoi<span class=\"token punctuation\">.</span>astype<span class=\"token punctuation\">(</span><span class=\"token builtin\">float</span><span class=\"token punctuation\">)</span>\n            maskInv <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>merge<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>maskInv<span class=\"token punctuation\">,</span> maskInv<span class=\"token punctuation\">,</span> maskInv<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            alpha <span class=\"token operator\">=</span> maskInv<span class=\"token punctuation\">.</span>astype<span class=\"token punctuation\">(</span><span class=\"token builtin\">float</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token number\">255</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"相乘之前保证两者大小一致（可能会由于四舍五入原因不一致）\"</span><span class=\"token punctuation\">)</span>\n            alpha <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>alpha<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            bg <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>multiply<span class=\"token punctuation\">(</span>alpha<span class=\"token punctuation\">,</span> bgRoi<span class=\"token punctuation\">)</span>\n            bg <span class=\"token operator\">=</span> bg<span class=\"token punctuation\">.</span>astype<span class=\"token punctuation\">(</span><span class=\"token string\">'uint8'</span><span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"提取帽子区域\"</span><span class=\"token punctuation\">)</span>\n            hat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>bitwise_and<span class=\"token punctuation\">(</span>resizedHat<span class=\"token punctuation\">,</span> cv2<span class=\"token punctuation\">.</span>bitwise_not<span class=\"token punctuation\">(</span>maskInv<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"相加之前保证两者大小一致（可能会由于四舍五入原因不一致）\"</span><span class=\"token punctuation\">)</span>\n            hat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>resize<span class=\"token punctuation\">(</span>hat<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> bgRoi<span class=\"token punctuation\">.</span>shape<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"两个ROI区域相加\"</span><span class=\"token punctuation\">)</span>\n            addHat <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>add<span class=\"token punctuation\">(</span>bg<span class=\"token punctuation\">,</span> hat<span class=\"token punctuation\">)</span>\n\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"把添加好帽子的区域放回原图\"</span><span class=\"token punctuation\">)</span>\n            img<span class=\"token punctuation\">[</span>y <span class=\"token operator\">+</span> dh <span class=\"token operator\">-</span> resizedHatH<span class=\"token punctuation\">:</span>y <span class=\"token operator\">+</span> dh<span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">(</span>eyes_center<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> resizedHatW <span class=\"token operator\">//</span> <span class=\"token number\">3</span> <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> addHat\n\n            <span class=\"token keyword\">return</span> img\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">main_handler</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">,</span> context<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">try</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"将接收到的base64图像转为pic\"</span><span class=\"token punctuation\">)</span>\n        imgData <span class=\"token operator\">=</span> base64<span class=\"token punctuation\">.</span>b64decode<span class=\"token punctuation\">(</span>json<span class=\"token punctuation\">.</span>loads<span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">[</span><span class=\"token string\">\"body\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"pic\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/tmp/picture.png'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'wb'</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n            f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span>imgData<span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"读取帽子素材以及用户头像\"</span><span class=\"token punctuation\">)</span>\n        hatImg <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>imread<span class=\"token punctuation\">(</span><span class=\"token string\">\"hat.png\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n        userImg <span class=\"token operator\">=</span> cv2<span class=\"token punctuation\">.</span>imread<span class=\"token punctuation\">(</span><span class=\"token string\">\"/tmp/picture.png\"</span><span class=\"token punctuation\">)</span>\n\n        output <span class=\"token operator\">=</span> addHat<span class=\"token punctuation\">(</span>userImg<span class=\"token punctuation\">,</span> hatImg<span class=\"token punctuation\">)</span>\n        cv2<span class=\"token punctuation\">.</span>imwrite<span class=\"token punctuation\">(</span><span class=\"token string\">\"/tmp/output.jpg\"</span><span class=\"token punctuation\">,</span> output<span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"读取头像进行返回给用户，以Base64返回\"</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/tmp/output.jpg\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"rb\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n            base64Data <span class=\"token operator\">=</span>  <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>base64<span class=\"token punctuation\">.</span>b64encode<span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> encoding<span class=\"token operator\">=</span><span class=\"token string\">'utf-8'</span><span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"picture\"</span><span class=\"token punctuation\">:</span> base64Data\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">except</span> Exception <span class=\"token keyword\">as</span> e<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token string\">\"error\"</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">(</span>e<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span></code></pre></div>\n<p>至此，即完成了通过用户上传人物头像进行增加圣诞帽的功能。</p>\n<h2 id=\"总结\"><a href=\"#%E6%80%BB%E7%BB%93\" aria-label=\"总结 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>总结</h2>\n<p>Serverless架构毕竟是一个新的技术，或者说是一个比较新的 Framework，如果刚开始就通过它来做一些很重的产品，可能会让学习者失去兴趣，但是前期可以通过Serverless架构不断的实现一些有趣的功能，小的应用，例如监控告警、图像识别、图像压缩、图像合成、文本摘要、关键词提取、简单的MapReduce等，通过这些小的应用，一方面可以让我们更加深入了解Serverless架构，另一方面也可以让我们对Serverless的实际应用和价值产生更大的信心。</p>\n<p>传统情况下，我们如果要做这样的一个工具，可能需要一个服务器，哪怕没有人使用，也要有一台服务器苦苦支撑，那么仅仅就是一个Demo，也要无时无刻的支出成本，但是在Serverless架构下，通过Serverless弹性伸缩特点让我们不惧怕高并发，通过Serverless的按量付费模式，让我们不惧怕成本支出。</p>\n<p>希望各位可以通过我的抛砖引玉，更加深入的了解Serverless架构。</p>\n<hr>\n<div id='scf-deploy-iframe-or-md'></div>\n<hr>\n<blockquote>\n<p><strong>传送门：</strong></p>\n<ul>\n<li>GitHub: <a href=\"https://github.com/serverless/serverless/blob/master/README_CN.md\">github.com/serverless</a></li>\n<li>官网：<a href=\"https://serverless.com/\">serverless.com</a></li>\n</ul>\n</blockquote>\n<p>欢迎访问：<a href=\"https://serverlesscloud.cn/\">Serverless 中文网</a>，您可以在 <a href=\"https://serverlesscloud.cn/best-practice\">最佳实践</a> 里体验更多关于 Serverless 应用的开发！</p>","tableOfContents":"<ul>\n<li><a href=\"/best-practice/2020-03-12-avatar-decoration/#serverless%E7%9B%B4%E6%8E%A5%E5%A2%9E%E5%8A%A0%E5%A4%B4%E5%83%8F%E8%A3%85%E9%A5%B0\">Serverless直接增加头像装饰</a></li>\n<li><a href=\"/best-practice/2020-03-12-avatar-decoration/#serverless%E4%B8%8E%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E8%81%94%E6%89%8B%E5%A2%9E%E5%8A%A0%E5%A4%B4%E5%83%8F%E8%A3%85%E9%A5%B0\">Serverless与人工智能联手增加头像装饰</a></li>\n<li><a href=\"/best-practice/2020-03-12-avatar-decoration/#%E6%80%BB%E7%BB%93\">总结</a></li>\n</ul>"},"previousBlog":{"id":"0529eafa-9029-59ad-875f-0b20e3a0c315","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020326/1585231022072-%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_15852308195522.png","authors":["Adrian S."],"categories":["guides-and-tutorials"],"date":"2020-03-17T00:00:00.000Z","title":"看懂 Serverless SSR，这一篇就够了！","description":"了解我们如何为每个 Webiny 网站获得出色的 SEO 支持，以及如何在无服务器环境中使用 SSR 使其超快运行","authorslink":["https://blog.webiny.com/serverless-side-rendering-e1c0924b8da1"],"translators":null,"translatorslink":null,"tags":["Serverless SSR","AWS Lambda"],"keywords":"腾讯云 Serverless,Serverless,Serverless framework","outdated":null},"wordCount":{"words":2153,"sentences":218,"paragraphs":215},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-03-17-serverless-ssr.md","fields":{"slug":"/blog/2020-03-17-serverless-ssr/","keywords":["go","nodejs","react","serverless","ssr","单页应用","服务端渲染","服务器端渲染","客户端渲染","同构渲染","无服务器","页面","缓存","渲染","Lambda","应用程序","方法","服务器"]}},"nextBlog":{"id":"a91ae766-b090-5f4d-891f-3332b7d58e00","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/20191230/1577673977066-16ef85f25ee1af09.jpg","authors":["yugasun"],"categories":["best-practice"],"date":"2020-03-10T00:00:00.000Z","title":"Serverless 多环境配置方案探索","description":"业务开发完了，如何管理不同环境的配置呢？","authorslink":["https://github.com/yugasun"],"translators":null,"translatorslink":null,"tags":["Serverless","管理环境"],"keywords":"Serverless 多环境配置,Serverless 管理环境,Serverless配置方案","outdated":true},"wordCount":{"words":241,"sentences":54,"paragraphs":54},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-03-10-serverless-env.md","fields":{"slug":"/best-practice/2020-03-10-serverless-env/","keywords":["koa","nodejs","python","serverless","云函数","serverless","dotenv","yml","配置","release"]}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"1f1b1317-32a1-50c4-a77f-df648ee9128f","previousBlogId":"0529eafa-9029-59ad-875f-0b20e3a0c315","nextBlogId":"a91ae766-b090-5f4d-891f-3332b7d58e00"}}}