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

文章介绍了如何在小程序开发中,通过canvas实现纯色背景图片的抠图功能,将白色背景变为透明。主要步骤包括在canvas上绘制图片,扫描并修改像素的透明度,最后重新绘制到canvas上,生成透明背景的图片。
摘要由CSDN通过智能技术生成

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

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

一、实现逻辑

        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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ai安歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值