首页 > 其他分享 >前端用画布去除图片多余的透明区域

前端用画布去除图片多余的透明区域

时间:2023-06-16 23:46:57浏览次数:33  
标签:img 前端 height 画布 width 去除 var imgData tOffset

 

传入图片的base64即可。

function clearblankimg(imgData){
    var img = new Image(); //创建图片对象
    img.src = imgData;
    img.onload = function() {
        var c = document.createElement('canvas'); //创建处理画布对象
        var ctx = c.getContext('2d');
        c.width = img.width;
        c.height = img.height;
        ctx.drawImage(img, 0, 0); //绘制
        var imgData = ctx.getImageData(0, 0, c.width, c.height).data; //读取图片数据
        var lOffset = c.width,
            rOffset = 0,
            tOffset = c.height,
            bOffset = 0;
        for (var i = 0; i < c.width; i++) {
            for (var j = 0; j < c.height; j++) {
                var pos = (i + c.width * j) * 4
                if (imgData[pos] == 255 || imgData[pos + 1] == 255 || imgData[pos + 2] == 255 || imgData[pos + 3] == 255) {
                    bOffset = Math.max(j, bOffset); // 找到有色彩的最下端
                    rOffset = Math.max(i, rOffset); // 找到有色彩的最右端
                    tOffset = Math.min(j, tOffset); // 找到有色彩的最上端
                    lOffset = Math.min(i, lOffset); // 找到有色彩的最左端
                }
            }
        }
        lOffset++;
        rOffset++;
        tOffset++;
        bOffset++;
        var x = document.createElement("canvas"); //创建处理后画布对象
        x.width = rOffset - lOffset;
        x.height = bOffset - tOffset;
        var xx = x.getContext("2d");
        xx.drawImage(img, lOffset, tOffset, x.width, x.height, 0, 0, x.width, x.height); //绘制

        console.log(x.toDataURL()); //得到最终裁剪出来的base64

    }

}

 

 

去除前:

图片有大量透明区域是没用的,只需要保留下面的有色区域

 

 

去除后:

图片透明区域裁剪掉

 

标签:img,前端,height,画布,width,去除,var,imgData,tOffset
From: https://www.cnblogs.com/Hello233/p/17486711.html

相关文章

  • 前端跨域问题
    跨域问题什么是跨域?什么是同源策略及其限制内容?同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。同源策略限制内容有:Co......
  • 【React工作记录一百零八】前端小知识点扫盲笔记记录9
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结如何截取字符串<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • 【React工作记录一百零九】前端小知识点扫盲笔记记录10
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结对称数<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="IE=edge"/>......
  • nginx升级和去除http响应中的Server头信息
    这两天接到个需求,就是去除http响应中的Server头信息,说是容易被黑客利用进行有针对的攻击,这个理由很充分,还是要安排上。 我们的http是nginx做的反向代理,于是需求就变成了  Nginx去除HTTPServer头查找了一番,大部分都是隐藏nginx版本server_tokensoff;配置类似于:user......
  • 仿喜茶GO小程序前端模板源码,奶茶店微信小程序源码
    本项目包含:首页点单喜茶百货百货详情历史订单我的积分商城积分商城详情页我的-微信一键登录我的-成为星球会员我的-个人资料我的-钱包我的-阿喜有礼会员码任务中心下载地址点击下载仿喜茶小程序源码运行效果图 ......
  • 如何构建前端日历组件
    前端日历组件是在网页中展示时间的重要组件之一,通常被应用于各种类别的网站和应用程序中。这篇文章将介绍如何构建一个高质量、易用且功能强大的前端日历组件。首先,我们需要确定需求和目标。一个好的日历组件应该具有以下特点:易于使用:用户应该可以轻松地使用日历组件并进行导......
  • 前端学习C语言 - 数组和字节序
    数组本篇主要介绍:一维二维数组、字符数组、数组名和初始化注意点以及字节序。一维数组初始化有以下几种方式对数组初始化://定义一个有5个元素的数组,未初始化inta[5];//定义一个有5个元素的数组,将第一个初始化0,后面几个元素默认初始化为0inta[5]={0};//定义一个......
  • 前端新手学习入门路径推荐
    背景目的方便新手学习前端技术,整理了一些资源和教程帮助大家更好的入门。基础知识了解一遍有个印象即可,不懂暂时不必深究,在后续实践中会融会贯通。大家重点关注“训战结合”的部分,动手练习并解决问题进步最有效。 Vue学习顺序https://zhuanlan.zhihu.com/p/23134551起......
  • 视频直播源码,html2canvas 前端保存页面为图片
    视频直播源码,html2canvas前端保存页面为图片转换方法如下: /***将页面指定节点内容转为图片*1.拿到想要转换为图片的内容节点DOM;*2.转换,拿到转换后的canvas*3.转换为图片*///生成局部图片GenerateImg(){ letelement=this.$refs.canvasImgObj; //console.warn(el......
  • 前端table组件封装
    前端表格组件是现代Web应用程序中常见的UI控件之一,也是前端开发人员最常用的控件之一。在实际项目中,一个好的前端表格组件必须具备稳定性、易用性和扩展性等特点。因此,对于前端表格的封装技术非常重要。前端表格的封装技术包括以下几个方面:数据源封装:前端表格必须有一个数据源,......