微信小程序canvas画图案列,实现生成头像并保存,小程序新版canvas变化,小程序中canvas注意事项

这篇具有很好参考价值的文章主要介绍了微信小程序canvas画图案列,实现生成头像并保存,小程序新版canvas变化,小程序中canvas注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你一定见过很多制作头像的小程序,无论是国庆的红旗,圣诞的帽子,还是疫情的口罩,都可以用小程序生成应景的头像,那么具体的代码是怎么实现的呢?前些天帮别人做了一个生成姓氏头像的功能,里面的实现原理基本一致,都是通过Canvas实现,以生成姓氏头像为例,记录一下小程序的Canvas如何使用. (小程序的文档就是依托答辩😒)

小程序Canvs

1.canvas的标签

如果你想使用它的话,要先在wxml写上canvas标签,这里有坑,注意你的写法,如果你上网copy的代码,绝大部分是老版的canvas.

老版的canvas,部分api已经失效,新版的文档写了等于没写.


//旧版 写法
<canvas canvas-id="myCanvas" />
//新版 写法
<canvas id="myCanvas" type="2d" />
新版的必须声明 type="2d"
//区别不是很大,如果你在网上找代码 一定要使用对应版本的api

2.获取canvas对象及上下文内容


//旧版获取canvas上下文
const context = wx.createCanvasContext('myCanvas')
// 新版获取canvas及上下文
wx.createSelectorQuery() //此方法等于获取页面所有节点
    .select('#myCanvas') //类似原生JS的选择器,这里根据id
    .fields({ node: true, size: true })//获取到的节点属性配置,node是否返回实例,size是否返回尺寸大小尺寸
    .exec((res)=>{ //获取之后的回调
        // Canvas 对象
        const canvas = res[0].node
        // 渲染上下文
        const ctx = canvas.getContext('2d')
    
    })

3.初始化canvas画布


wx.createSelectorQuery() 
    .select('#myCanvas') 
    .fields({ node: true, size: true })
    .exec((res)=>{ 
        // Canvas 对象
        const canvas = res[0].node
        // 渲染上下文
        const ctx = canvas.getContext('2d')
        
        // Canvas 画布的实际绘制宽高
        const width = res[0].width
        const height = res[0].height
        
        // 初始化画布大小
        const dpr = wx.getWindowInfo().pixelRatio//获取屏幕比例,用来解决渲染画布模糊的问题
        canvas.width = width * dpr
        canvas.height = height * dpr
        ctx.scale(dpr, dpr)
        
        // 用来解决画布里面东西能够自适应,不同屏幕不同尺寸 375不行的话用750
        const ratio = wx.getSystemInfoSync()?.windowWidth / 375; 
    })

4.开始绘制canvas内容 (开始接入业务,可按照自己需求进行)


wx.createSelectorQuery() 
    .select('#myCanvas') 
    .fields({ node: true, size: true })
    .exec((res)=>{ 
       //...
       //省略了步骤3的代码,使用时,请自己补全!!!!慎记!!!
       //...
       //清除画布内容
       //前两个参数 可以理解为 要清除的起点 x y坐标
       //后两位参数 是你要选择的区域大小
       //以下为例 在画布的 0 0 起点清空高宽与画布本身相等的区域,等于全部清空
       ctx.clearRect(0, 0, width, height) 
       
       //因为我是生成姓氏头像,所以画布的底图是提前有的
       //可以是获取用户 可以走接口 图片地址用Https!!!!
       //创建图片对象
       const bg = canvas.createImage()
       //底图地址
       bg.src = 'https://gitee.com/ouchFF/blog_img/raw/master/img/bg.jpg' 
       bg.onload = () => { //图片加载完毕
          //第一个参数是图片对象 其他参数与清空画布类似
          ctx.drawImage(bg, 0, 0, width, height) //绘制图片
        }
    })

写到这一步,不出意外已经可以看见我们绘制的底图了.

微信小程序canvas画图案列,实现生成头像并保存,小程序新版canvas变化,小程序中canvas注意事项

5.生成姓氏,并绘制到canvas画布上


//这里写生成姓氏的方法 通过点击页面按钮触发
//这里的姓氏 本质是一张图片 因为生成的姓氏是带字体的 
//设置自定义字体我搞了好久也没成功,希望有人能给我解答
//正常是 用户写一个姓氏,调用接口,后端返回一个姓氏的png图片地址
//我这里没有接口,所以直接用我准备好的图片
  selectText() { //点击按钮触发
    //第三步的时候 我已经将 canva相关东西存入data里了 这里直接用
    const _this = this.data
    const bg = _this.canvas.createImage() //创建图片对象
    //假装这是后端返回的一个姓氏图片地址
    bg.src = 'https://gitee.com/ouchFF/blog_img/raw/master/img/shuai.png'
    bg.onload = () => {
      _this.ctx.drawImage(bg, 150 * _this.ratio, 150 * _this.ratio, 40 * _this.ratio, 40 * _this.ratio) //绘制图片
    }
    //这里每个值我都乘了一个ratio 这是因为api本身默认单位是px
    //在不同屏幕下 可能位置会偏移 为了实现像rpx那样能自适应,需要乘以一个系数
    //这个系数 是在第三步中 计算的
  },

点击按钮后效果如下图 会看见叠加了一张姓氏图

微信小程序canvas画图案列,实现生成头像并保存,小程序新版canvas变化,小程序中canvas注意事项

 

假设你并没有字体要求,只是单纯的想添加文字,那么也可以按以下写法


//向画布中添加 文字
  selectText2() {
    const { ctx, canvas, ratio,dpr } = this.data
    // 设置文字样式 这代码是我想设置自定义字体的 并没有生效,可以忽略
    //除了字体样式 其他设置是生效的
    ctx.font = `normal ${50*ratio}px 仓耳渔阳体`; //设置字体
    ctx.font = `normal ${50*ratio}px font`; //设置字体
    //添加文字 第一个参数是文字内容
    //其他参数是起始点x y (这里起始点可能有问题 可以自己看看文档)
    ctx.fillText(this.data.text, 100*ratio, 100*ratio); //绘制文字
  },

6.将生成的canvas内容保存到我们自己的手机上


save() {
//同样 新老版本有差异 我这是新版的保存
    wx.canvasToTempFilePath({
      canvas: this.data.canvas,
      success: (res) => {
        wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success(res) {
            wx.showToast({
              title: "保存成功,请在相册中查看",
            });
          },
        });
      },
      fail(error) {
        return reject(error);
      },
    });
  },

至此,一个简单的生成头像功能就完成了.有需要此案例源码的,可以私信我~~文章来源地址https://www.toymoban.com/news/detail-491909.html

到了这里,关于微信小程序canvas画图案列,实现生成头像并保存,小程序新版canvas变化,小程序中canvas注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序canvas生成图片并保存

    需求: 做一个类似下图的功能。图片内容是动态的,用canvas画出来,生成临时图片,再保存。 实现:  其他使用,查看微信开发文档  

    2024年02月13日
    浏览(42)
  • 微信小程序:使用canvas 生成图片 并分享

    废话不多说直接上代码!!!! 最终效果图  

    2024年02月11日
    浏览(46)
  • 微信小程序使用canvas生成分享海报功能复盘

    近期需要开发一个微信小程序生成海报分享的功能。在h5一般都会直接采用 html2canvas 或者 dom2image 之类的库直接处理。但是由于小程序不具备传统意义的dom元素,所以也没有办法采用此类工具。 所以就只能一笔一笔的用 canvas 画出来了,下面对实现这个功能中遇到的问题做一

    2024年02月16日
    浏览(53)
  • 微信小程序-生成canvas图片并保存到手机相册

    wxml页面 wxss页面 js代码

    2024年02月10日
    浏览(48)
  • 微信小程序使用canvas画布生成二维码海报分享图片(完整示例代码)

    canvas.js //获取应用实例 const app = getApp() Page({ /** 页面的初始数据 */ data: { // canvas _width: 0, //手机屏宽 _heigth: 0,//手机屏高 swiperHeight: 300,//主图图片高度 canvasType: false,//canvas是否显示 loadImagePath: ‘’,//下载的图片 imageUrl: ‘https://cos.myfaka.com/car/service/1.jpg’, //主图网络路径 codeU

    2024年04月12日
    浏览(77)
  • uni-app 微信小程序 图文生成图片 wxml-to-canvas

    在做的小程序要增加一个将文字与图片生成图片不可修改的功能,第一次做,在网上找了不少资料。参考了wxml-to-canvas | 微信开放文档  ,又看了一些相关事例,尝试写了一下。   需要准备的文件及配置项: 1、先把代码片段下载到本地 2、创建wxcomponents目录,把代码片段中的

    2024年02月09日
    浏览(38)
  • 微信小程序--canvas画布实现图片的编辑

    上传图片,编辑图片大小,添加文字,改变文字颜色等 微信小程序--canvas画布实现图片的编辑 软件环境:微信开发者工具 官方下载地址:微信开发者工具下载地址与更新日志 | 微信开放文档 1、基本需求。 实现上传图片 实现图片编辑 实现添加文字 实现导出图片 2、案例目录

    2024年02月05日
    浏览(38)
  • 微信小程序canvas type=2d生成海报保存到相册、文字换行溢出显示...、文字删除线、分享面板

    做个简单的生成二维码海报分享, 我做的时候也找简单的方法看能不能实现页面直接截图那种生成图片,原生小程序不支持, 不多介绍下面有全部代码有注释、参数自行替换运行看看,还有需要优化的地方,有问题可以咨询我,我写的已经上线 如图:

    2024年02月11日
    浏览(39)
  • 微信小程序使用 canvas 2d 实现签字板组件

    本文是在微信小程序中使用 canvas 2d 来实现签字板功能; 效果图: 代码: 1、wxml 2、js 3、总结 canvas 的宽度和高度可以写死,也可以根据当前可是区域动态计算;需要注意的是 res[0].node 的宽度和高度的计算是当前 canvas 元素上的宽度和高度乘设备的 pixelRatio ;

    2024年02月09日
    浏览(34)
  • 微信小程序中使用画布canvas实现动态心电图绘制

    大家好,我是雄雄。 近期,接了个项目,三端(小程序、PC、公众号)同步开发,PC端没的问题,以前一直做的就是PC端,但是小程序和公众号之前没有做过,只能通过这个项目,边做边学了。 人家都说小程序用原生的特别难,大部分都用 uniapp 开发,说是这个方便快捷,还能

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包