【微信小程序5】利用canvas实现纯色背景抠图功能

这篇具有很好参考价值的文章主要介绍了【微信小程序5】利用canvas实现纯色背景抠图功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        最近,在小程序开发过程中,遇到了需要设置背景透明效果功能的需求。如果借助百度开放接口实现抠图功能是非常方便的,但是一个最大的缺点就是需要money支持。不得已,参考网上各家代码,实现了借助canvas来实现纯色背景抠图功能。只是非常简单的一个应用,先看效果:

canvas怎么抠图,Mob移动端实践笔记,微信小程序,小程序

        好,下面我们来梳理下逻辑,同时完成代码的编写。

一、实现逻辑

        1、准备好一张纯色背景的图片(我设置的剔除白色背景的)。

        2、把该图片绘制到canvas上(保持大小比例不变)。

        3、对canvas上的每个像素进行扫描,把像素是白色背景的透明度设置为透明

        4、把设置完成的图像再重新绘制到canvas上

        5、完成。背景色设置成透明。

二、代码实现

        现在根据实现逻辑,我们来编写代码,具体如下:

         1、在wxml文件中,添加canvas标签。(class样式不展示了,这是自定义的)

<canvas id="myCanvas" type="2d" class="mv-cvs"></canvas>

        2、添加一个按钮事件,来实现剔除图片背景颜色。

<button bindtap="clickBgd">背景透明</button>

        3、在clickBgd中编写抠图代码:

clickBgd() {

    wx.createSelectorQuery()
      .select('#myCanvas') // 在 WXML 中填入的 id
      .fields({ node: true, size: true })
      .exec((res) => {
        // Canvas 对象
        const canvas = res[0].node
        // 渲染上下文
        const ctx = canvas.getContext("2d")
        const image = canvas.createImage()
        // const dpr = wx.getSystemInfoSync().pixelRatio

        let that = this
        // 图片加载完成回调
        image.onload = () => {
          // 将图片绘制到 canvas 上
          let width = 300
          let height = 150
          console.log("width2:", width, ",height2:", height);
          ctx.drawImage(image, 0, 0, width, height)

          const imgDt = ctx.getImageData(0, 0, width, height)
          const data = imgDt.data

          for (let i = 0; i < data.length; i += 4) {
            let r = data[i + 0]
            let g = data[i + 1]
            let b = data[i + 2]
            data[i + 0] = 255
            data[i + 1] = 0
            data[i + 2] = 0
            if ([r, g, b].every(v => v > 80 && v < 256)) {
              data[i + 3] = 0
            }
          }
            //清除画布之前的图片
          ctx.clearRect(0, 0, 360, 360)
            //创建新的图片数据
          let nimgdt = canvas.createImageData(data, width, height)
          ctx.putImageData(nimgdt, 0, 0)
            //转成png格式的图片
          let dtUrl = canvas.toDataURL("image/png")
          console.log("dataurl:", dtUrl);
          that.setData({
            imgsrc: dtUrl,
          })
        }

        // 设置要剔除背景色的图片src
        image.src ="picture.jpg";

      })
  },

三、完整代码

        具体完整代码链接:https://download.csdn.net/download/m0_60318025/87894106文章来源地址https://www.toymoban.com/news/detail-790806.html

到了这里,关于【微信小程序5】利用canvas实现纯色背景抠图功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序使用 canvas 2d 实现签字板组件

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

    2024年02月09日
    浏览(28)
  • 微信小程序实现输入内容生成二维码(canvas)

    1.封装好的QRcode的js文件 2.在我们需要使用的页面的js文件中引入该文件  效果如下:  3.首先在wxml中书写 canvas标签 4.先声明一个方法来解决中文乱码的问题 5.当我们文本域的值发生改变时,也要渲染到视图层 需求: 当我们文本框输入内容时,点击以下的生成二维码按钮,下

    2024年02月16日
    浏览(32)
  • 微信小程序canvas画图案列,实现生成头像并保存,小程序新版canvas变化,小程序中canvas注意事项

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

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

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

    2024年02月09日
    浏览(28)
  • 使用taro+canvas实现微信小程序的图片分享功能

    二轮充电业务中,用户充电完成后在订单详情页展示订单相关信息,用户点击分享按钮唤起微信小程序分享菜单,将生成的图片海报分享给微信好友或者下载到本地,好友可通过扫描海报中的二维码加群领取优惠。 使用场景及功能:微信小程序 生成海报图片 分享好友 下载图

    2024年02月05日
    浏览(49)
  • 微信小程序用 canvas 实现手写签名弹框(全网最最最详细!!)

    🌸点击弹出手写签名面板事件 🌸手写签名面板 Popup 弹出层( vant ) 🌸最后可以使用 canvas 组件的 toTempFilePath 方法将 canvas 画布内容保存为临时文件路径,然后将该路径传递给后端即可。 💡 文中触摸板的方法中多次获取 canvas 的上下文,即 const context = wx.createCanvasContext(\\\'

    2024年02月05日
    浏览(28)
  • 微信小程序canvas实现简易手写签名版(uni-app)

    微信小程序可以通过canvas实现手写签名的效果,本文中使用的是微信小程序Canvas 2D接口 本示例中绘制的是横屏签名的效果,效果图如下: 这里我们需要调整canvas的物理宽高,默认物理宽高为300*150px,物理宽高调整通过css样式即可,本文中需要根据屏幕高度进行动态调整,使

    2024年02月12日
    浏览(40)
  • uni-app 微信小程序中如何通过 canvas 画布实现电子签名?

    一、实际应用场景 电子签名软件应用场景:电子签名在金融、银行、贷款行业中可以用于对内日常办公流转的文档的盖章签字,对外涉及业务合作协议,采购合同,贷款申请、信用评估、贷款合同、贷款文件表、说明函等等。 可以说,只要是涉及纸质文档签字盖章的场景,

    2024年02月10日
    浏览(34)
  • 基于微信小程序的校园监考管理系统设计与实现课题背景、目的、意义

     目录 一、整体目录(示范): 文档含项目技术介绍、E-R图、数据字典、项目功能介绍与截图等 二、运行截图 三、代码部分(示范): 四、数据库表(示范): 数据库表有注释,可以导出数据字典及更新数据库时间,欢迎交流学习 五、主要技术介绍: 六、项目调试学习(点

    2024年01月22日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包