利用 html2canvas && canvas 实现纯色背景图片抠图<vue>

1.  html中写好自己需要抠图的 img 元素图

<div id="poster">
  <img :src="poster" />
</div>

2. 抠图方法实现

methods:{
  getPoster(){ // 抠图方法
      const element = document.getElementById('poster'); 
      // 要捕获的HTML元素
      const backgroundColor = [255, 255, 255]; // 假设背景色为白色
      const tolerance = 50; // 容差值
      
      html2canvas(element).then(canvas => {

        // 获取Canvas的上下文
        const ctx = canvas.getContext('2d');
        // 获取Canvas的像素数据
        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
        const data = imageData.data;


        // 遍历像素数据
        for (let i = 0; i < data.length; i += 4) {
          if (this.isWithinBackgroundColor(data, i, backgroundColor, tolerance)) {
            // 如果像素在背景色容差范围内,则设置为透明
            data[i + 3] = 0;
          }
        }

        // 将处理后的像素数据放回Canvas
        ctx.putImageData(imageData, 0, 0);
        // 将Canvas转换为图片并显示
        let dataURL = canvas.toDataURL("image/png");

        if (dataURL !== "") { // 下载
         // dataURL为生产好的base64图片 下载|| 直接使用都可
          var a = document.createElement('a')
          a.download = 'title';
          a.href = dataURL;
          a.click()
        }
      })
  },
  isWithinBackgroundColor(data, index, bgColor, tolerance) {
     const r = data[index];
     const g = data[index + 1];
     const b = data[index + 2];
     const a = data[index + 3];

     // 判断当前像素是否为纯背景色
     return (
      Math.abs(r - bgColor[0]) < tolerance &&
      Math.abs(g - bgColor[1]) < tolerance &&
      Math.abs(b - bgColor[2]) < tolerance &&
      a === 255
    );
  }
}

注: 抠图为设置好的颜色+-容差值进行每个像素点遍历判断,如果图片内容中有与设置好的颜色+-容差值一样的皆会被抠除!!!

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
生成图片的过程需要使用到html2canvas库。首先,你需要安装html2canvas库,可以通过运行命令`npm install --save html2canvas`来进行安装。然后,在你的项目中引入html2canvas库,可以使用`import html2canvas from "html2canvas"`语句进行引入。接下来,你需要在指定的HTML元素上添加ref属性,例如`<div class="container" ref="imageDom"></div>`。最后,你可以使用`html2canvas(this.$refs.imageDom).then(img => {})`将指定节点的内容转为图片,并在回调函数中进行处理。可以使用`img.toDataURL("image/png")`将图片转为base64格式。请注意,这个过程可能会遇到一些问题,你可以参考官方文档和其他开发者的经验来解决这些问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue 插件 html2canvas 将页面内容生成图片](https://blog.csdn.net/GrootBaby/article/details/114669018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue使用html2canvas合成图片](https://blog.csdn.net/Mr_ito/article/details/121713698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值