0

0

手把手带你实现虎年头像框制作小程序(实践)

青灯夜游

青灯夜游

发布时间:2022-01-19 10:29:36

|

7470人浏览过

|

来源于掘金社区

转载

虎年春节快来了,如何给图片添加上虎年头像框,下面本篇文章带大家制作一个小程序来实现这个功能,希望对大家有所帮助!

手把手带你实现虎年头像框制作小程序(实践)

又到了一年的结尾,感觉时间过的逝贼鸡儿快,一晃一年就没了,一晃一年又没了。

记得去年由于疫情的原因没有回家过年,年三十的晚上就在家族微信群里面发那种通过玩游戏获得红包的小程序,也是很欢乐的。

虽然我自己没开发过小游戏,但是小程序还是写过一些,这不最近看到很多朋友都换上了新年头像。 就像下面这种的:

1.png

看了下主要就是两部分:图片 + 相框 叠加保存为一张图片,那我也可以去实现一个。

于是就有了这篇文章,自制虎年头像框小程序。

实现

话不多说,先上效果图。

2.gif

1、实现原理

通过效果图可以看到,在这个地方用到了两张图片:

一张是通过“获取头像”按钮获取的微信用户的头像,用作底图;

另外一张是相框图片,这是预制的静态资源;

在点击“保存头像”的时候,将上面两张图片分别通过canvas画到画板上,先画底图,在画相框图,绘制完成后将画板上的图片保存到本地就完事了。

下面开始介绍具体的实现步骤。

3.png

2、收集静态资源

在我这个小程序中内置了一些静态资源,比如:头像框图片、首页背景图片、底部导航栏图标等。

这些图片来源于下面这几个网站,仅供参考。

阿里巴巴矢量图标库https://www.iconfont.cn/

获取图标的好去处。

千图网

https://www.58pic.com/

获取背景图片、头像框等的好去处。

3、编码

分为三个部分介绍编码这个阶段。

3.1 获取微信用户头像

微信小程序提供有api获取微信用户信息。 wx.getUserProfile(Object object)

通过button按钮点击,获取微信用户信息:

getUserProfile实现如下:

科大讯飞-AI虚拟主播
科大讯飞-AI虚拟主播

科大讯飞推出的移动互联网智能交互平台,为开发者免费提供:涵盖语音能力增强型SDK,一站式人机智能语音交互解决方案,专业全面的移动应用分析;

下载
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
    getUserProfile(e) {
      let that = this;
      wx.getUserProfile({
          desc: '仅用于生成头像使用', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
          success: (res) => {
            //获取高清用户头像
            let url = res.userInfo.avatarUrl;
            while (!isNaN(parseInt(url.substring(url.length - 1, url.length)))) {
              url = url.substring(0, url.length - 1)
            }
            url = url.substring(0, url.length - 1) + "/0";
            res.userInfo.avatarUrl = url;
            that.setData({
              userInfo: res.userInfo,
              hasUserInfo: true
            })
          }
        });
    },

到这里获取微信用户头像已经完成。

备注: 通过res.userInfo默认返回来的用户头像是低分辨率的,要获取用户头像高清图需要进行处理。

3.2 绘制图像

绘制图主要用到了微信小程序提供画布相关API(https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.createOffscreenCanvas.html)

变量说明:

hotArr:[{name:'虎年相框',key:'hunian'},{name:'虎头帽子',key:'shendan'},{name:'国旗',key:'guoqing'}],

curHot:用于存放当前选择的hotArr的索引。

windowWidth:  wx.getSystemInfoSync().windowWidth

size: 260; //自定义的大小

pc : wx.createCanvasContext('myCanvas');

drawImg(){
      wx.showLoading({
        title: '生成头像中...',
      })
      let that = this;
      let type = this.data.hotArr[this.data.curHot].key;
      let promise1 = new Promise(function(resolve, reject) {
        wx.getImageInfo({
          src: that.data.userInfo.avatarUrl,
          success: function(res) {
            resolve(res);
          }
        })
      });
      var index = that.data.defaultImg;
      let promise2 = new Promise(function(resolve, reject) {
        wx.getImageInfo({
          src: `../../images/${type}/hat${index}.png`,
          success: function(res) {
            resolve(res);
          }
        })
      });
      Promise.all([
        promise1, promise2
      ]).then(res => {
        //主要就是计算好各个图文的位置
        pc.clearRect(0, 0, windowWidth, size);
        //绘制背景图
        pc.drawImage(res[0].path, windowWidth/2-130, 0, size, size)
        //绘制相框图
        pc.drawImage('../../' + res[1].path, windowWidth/2-130, 0, size, size)
        pc.stroke()
        pc.draw(false, () => {
            //图片绘制成功回调,调用保存canvas方法
            this.canvasToTempFile();
        })
      })
    },

wx.getImageInfo() 主要用于获取图片的信息,返回图片的本地路径;

这个地方主要是因为drawImage() 只支持绘制本地图片。

3.3 保存图像

在上一步我们已经将两张图片绘制到画布上面了,下面将画布上的内容保存到本地。

保存画布上的内容到本地相册也分为两步。

第一步:把当前画布指定区域的内容导出生成指定大小的图片。

通过使用 wx.canvasToTempFilePath()

第二步:将保存图片本地相册。

通过使用 wx.saveImageToPhotosAlbum(https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.saveImageToPhotosAlbum.html)

 canvasToTempFile(){
    wx.canvasToTempFilePath({
      x: windowWidth/2-130,  //这个地方减去130是因为我们的图片尺寸设置的是260
      y: 0,
      height: size,
      width: size,
      canvasId: 'myCanvas',
      success: (res) => {
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: result => {
            wx.hideLoading();
            wx.showModal({
              content: '图片已保存到相册,请前往微信去设置哟!',
              showCancel: false,
              success: function(res) {
                if (res.confirm) {
                  console.log('用户点击确定');
                }
              }
            })
          }, fail(e) {
            wx.hideLoading();
            console.log("err:" + e);
          }
        })
      }
    });
  },

到这里也就实现了基本的头像框功能。

最后

感兴趣的小伙伴可以扫码体验:

4.png

当然了,基于上面的内容你也可以制作自己的头像小程序。

最后 提前恭祝大家春节快乐,虎年大吉!!!

6.gif

【相关学习推荐:小程序开发教程

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

605

2023.06.14

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

646

2023.06.21

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

466

2023.07.31

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

245

2023.08.01

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2883

2023.08.11

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

503

2023.08.11

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

310

2023.08.31

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

423

2023.09.01

PHP 表单处理与文件上传安全实战
PHP 表单处理与文件上传安全实战

本专题聚焦 PHP 在表单处理与文件上传场景中的实战与安全问题,系统讲解表单数据获取与校验、XSS 与 CSRF 防护、文件类型与大小限制、上传目录安全配置、恶意文件识别以及常见安全漏洞的防范策略。通过贴近真实业务的案例,帮助学习者掌握 安全、规范地处理用户输入与文件上传的完整开发流程。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3万人学习

Excel 教程
Excel 教程

共162课时 | 11.5万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号