JS检测PNG图片是否有透明背景抠图等相关处理«张鑫旭鑫空间

用户上传图片,如果是PNG图片,有时候我们希望这张PNG图片背景不要是透明的,例如:

有时候,我们又希望上传的PNG图片带透明的,例如:

以上这些场景的处理通常这样的:

实际上,以上所有的处理都可以在上传图片的时候由前端一次性解决。

分两步:

如果是不含透明色的PNG图片,则会提示不含透明;如果是,则提示含透明,如下截图:

一句话概括就是getImageData()方法可以获取canvas画布上每一个像素点的颜色信息,于是,我们只要把上传的图片绘制在canvas上,然后检测有没有透明的像素点信息即可。

//图片绘制在画布上context.drawImage(img,0,0);//获取图片像素信息varimageData=context.getImageData(0,0,width,height).data;//检测有没有透明数据varisAlphaBackground=false;for(varindex=3;index<imageData.length;index+=4){if(imageData[index]!=255){isAlphaBackground=true;break;}}//isAlphaBackground就是最后石头有透明或半透明背景色的结果上面imageData就是我们获取的图片像素信息数组,是个一维数组,类型为Uint8ClampedArray,也就是数组中所有的值范围都是0~255,数组信息这样:

[R,G,B,A,R,G,B,A,R,G,B,A,R,G,B,A,R,G,B,A,R,G,B,A,...]因此,我们只要判断数组中的A是否全部都是255就可以判断有没有透明信息了,一个for循环就搞定了。

如果站在解决实际问题的角度,判断是否背景透明并不一定要得到。

好在,如果只是想实现一个不太复杂的图片背景色去色效果,还是挺容易的。

实现的关键依然是getImageData()方法,去色,然后把相似颜色变成透明颜色就可以了。

例如,我们点击左边图片的白色区域,然后设置容差值是20,点击“执行去色”按钮,结果如下截图:

如果我们选择紫色,则效果是:

关键2个步骤,一是取色,二是去色。

1.取色的实现

根据点击坐标,取当前点击位置像素点颜色值信息即可,代码如下:

canvas.addEventListener('click',function(event){varrect=this.getBoundingClientRect();varx=event.clientX-rect.left;vary=event.clientY-rect.top;//rgbaPicker就是点击像素点的颜色信息rgbaPicker=context.getImageData(x,y,1,1).data;});2.去色的实现

去色则是替换getImageData()的一些像素点色值为透明即可,这个不难,难的是如何判别两种色值是相似的呢?

这里有个简易的颜色色值相似度计算算法:

similar=Math.sqrt((r2-r1)*(r2-r1)+(g2-g1)*(g2-g1)+(b2-b1)*(b2-b1))其中,r2,r1表示RGB中的红色red,g2,g1表示RGB中的绿色green,b2,b1表示RGB中的蓝色blue。

OK,有了相似度算法,下面就是简单的色值替换处理了:

//像素点色值varrgba=rgbaPicker;//容差大小vartolerance=eleTolerance.value;//基于原始图片数据处理,//其中://imgData是左图像素信息,//imgDataResult是右图处理后的像素信息for(varindex=0;index<imgData.data.length;index+=4){varr=imgData.data[index];varg=imgData.data[index+1];varb=imgData.data[index+2];if(Math.sqrt((r-rgba[0])*(r-rgba[0])+(g-rgba[1])*(g-rgba[1])+(b-rgba[2])*(b-rgba[2]))<=tolerance){imgDataResult.data[index]=0;imgDataResult.data[index+1]=0;imgDataResult.data[index+2]=0;imgDataResult.data[index+3]=0;}else{imgDataResult.data[index]=r;imgDataResult.data[index+1]=g;imgDataResult.data[index+2]=b;imgDataResult.data[index+3]=imgData.data[index+3];}}//put数据contextResult.putImageData(imgDataResult,0,0);点睛代码就是最后的putImageData(),可以让画布使用新数据进行图像呈现,就可以看到去色后的效果了。

这里的去色效果是最简单的去色效果了,其实标准的去色功能,还需要一个“连续”还是“不连续”的勾选功能。

但是,对于图标和logo这些去色需求,当前的整体去色应该足够,“连续”功能有兴趣的小伙伴可以自己尝试实现下,考验连续区域算法。

忽略眼前利益的极致追求,或许是自己印刻在骨子里的特质吧,也是自己能够成长到现在这个样子的原因所在。

THE END
1.在线图片转透明背景工具图片转透明背景设计模板了解如何将图片转换为透明背景!本专题页面详细介绍图片转透明背景的设计方案与步骤,推荐多款便捷的在线设计工具,以及各类精美的透明背景设计模板。通过我们的指导,轻松实现图片透明化,提升设计效果,满足多种场景需求。https://www.gaoding.com/features/make-image-background-transparent
2.图片去底色背景变透明在线工具压缩图图片去底色工具能够将图片纯色背景去除,在线将图片修改为透明png格式,一键智能修改,无需下载打开即用。http://douyin.yasuotu.com/buttonColor
3.在线抠图软件AI智能抠图简单三步,轻松抠图 上传图片 上传一张文件大小不超过25M的图片,或直接拖拽图片到虚线区域内。图片上传成功后,页面自动跳转到编辑器。 开始抠图 注册或登录你的Canva可画账号,点击“编辑图像”,点击“抠图”,删除图片背景。 保存图片为PNG格式,勾选“透明背景”,立即下载透明底PNG图片。 https://canva.cn/features/remove-background/
4.在线抠图工具AI图片去除背景/替换背景2.证件照换底色,在线抠图 无需标注前景背景,智能AI自动识别抠图区域,一键删除图片背景,立即生成有透明背景的PNG图片。 3.一键生成商品白底图 电商平台对商品主图有着严格的上传规范,白色背景是最常见的要求之一。借助抠图工具,你可以快速删除图片中的背景,生成商品白底图。 4.免https://microsoftedge.microsoft.com/addons/detail/%E5%9C%A8%E7%BA%BF%E6%8A%A0%E5%9B%BE%E5%B7%A5%E5%85%B7-ai%E5%9B%BE%E7%89%87%E5%8E%BB%E9%99%A4%E8%83%8C%E6%99%AF%E6%9B%BF%E6%8D%A2%E8%83%8C%E6%99%AF/ehcklkanebjdkajfacgkmpnhgpmchdhm?lc=1036
5.起兮深探人工智能抠图 无需标注前景背景,深求AI人工智能,自动识别抠图区域,省时省力,快速获得带透明背景PNG。 无需下载PS,集成换背景 不论是纯色填充,还是背景替换,轻量点选,彻底摆脱PhotoShop,更有海量背景免费供选择,轻松又省钱。 上传或 确定 为什么选我们 http://www.deeplor.com/
6.使用在线PS网站——快速抠成透明背景(纯色背景+复杂背景抠图操作)文章浏览阅读1.9k次,点赞9次,收藏6次。使用在线PS网站——快速抠成透明背景(纯色背景+复杂背景抠图操作)_在线图片背景透明处理https://blog.csdn.net/qq_41264055/article/details/140831782
7.BgRemover在线图片去底工具在线AI智能抠图 在线图片去水印 容差值: 图片处理完毕,点击下载 原始图片: 去底后的图片: 工具说明:当我们在提取一些素材图片的时候,可能由于图片格式等原因,使得原本背景透明的图片变成了纯色背景的图片。这时候我们可以使用BgRemover图片去底工具将“纯色背景的图片”再次还原成“透明背景的图片”。 https://www.aigei.com/bgremover/?source=tools.ikjzd.com
8.抠人物,用通道抠出半透明的婚纱照片抠人物,用通道抠出半透明的婚纱照片 刚刚开始学用PS抠图的时候以为钢笔能解决所有问题,然后发现了通道,马上就觉得PS的通道才是最神奇的。抠图有很多种,同学们可以根据图片的具体情况进行修图,钢笔抠图固然很方便,但是也需要因图制宜,找到最快速方便的那种,帮我达到效果才是关键,一起来动手操作一下吧。操作https://baijiahao.baidu.com/s?id=1751103345330509942&wfr=spider&for=pc
9.图片怎么抠图成透明底?这四个方法可以使新手速成图片怎么抠图成透明底?这四个方法可以使新手速成 在当今的数字时代,进行图片编辑是一个经常需要进行的操作,其中抠图也成为我们经常需要进行的操作,可以制作多种不同的图片。无论是设计海报、广告还是制作视频,我们经常需要将图片中的某个元素提取出来,或者将图片中的某个部分替换成透明背景。今天,我们就来探讨一下https://maimai.cn/article/detail?fid=1854529929&efid=Xf_PMEjN3YDrE53OQBRDaQ
10.PS抠图主要是头发那儿。扣成透明底的中关村在线 vivo X90 Pro+ 登录 | 注册 意见反馈 首页 排行 新品 问答 下载 论坛 手机 笔记本 数码相机 主板 显卡 平板电脑 更多 PS抠图主要是头发那儿。扣成透明底的机柜 宣墨电气 宣墨电气 PS机柜 查看全部3条评论回答 写回答 zangsishen png透明背景 有用(0) 回复 举报 https://wap.zol.com.cn/ask/details_24227091_1170076_3.html
11.抠图免费在线抠图软件在线ps抠图换透明背景工具比格设计提供免费在线抠图工具和在线PS抠图软件,不论是证件照换底色、还是图片换背景,无需下载PS软件也能轻松实现抠图效果,上传图片即可一键自动智能抠图,简单3步即可拥有透明背景图片。https://bigesj.com/topic/picEditorHome.html
12.一键抠图工具:4个在线抠图网站轻松搞定抠图!办公软件是否曾有朋友觉得抠图过程繁琐复杂,每当需要从图片中精确提取某个元素时,总是力不从心?别担心,今天我将分享四个强大的在线抠图网站,它们无需下载任何软件https://post.smzdm.com/p/awo6pz54/
13.智能在线AI抠图工具一键AI抠图免费网页版手动编辑和删除图像背景的日子已经一去不复返了。我们的免费在线AI抠图可以完全自动化该过程。丹青AI采用最先进的AI技术,可以快速检测图像中的主体,并在平滑的剪切中去除背景,为您留下高质量、干净的PNG透明背景。在线删除背景从未如此简单! 为任何图像制作透明底背景 https://www.danqingai.com/aikt/
14.美团群聊怎么退出?美团群聊里面怎么艾特别人?在群聊的设置中点击删除并退出即可。以vivo x60 Pro+为例,退出美团群聊共需3步,具体操作如下: 1点击群聊 在消息界面中,点击群聊。 2点击齿轮 在群聊界面中,点击齿轮。 3点击删除并退出 在齿轮界面中,点击删除并退出即可。 美团群聊里面怎么艾特别人 http://blog.we54.com/blog/2022/0608/74244.html
15.png免抠图透明图片大全png免抠图透明高清图片下载觅知网提供大量png免抠图透明图片,png免抠图透明高清图片在线下载。更多png免抠图透明图片下载,尽在觅知网。https://www.51miz.com/so-tupian/634998/p_19/
16.免费抠图背景变透明的app推荐如何抠图把背景换成透明免费抠图背景变透明的app是一种非常好用的图片编辑软件,很多的图片编辑工具可以使用,可以帮助你进行图片的编辑,在软件中点击想要使用的功能,就可以一键的使用,软件的时候非常的方便,用户可以轻松的使用,用户还可以把手机本地中的图片进行上传,就可以直接在软件中编辑图片。 https://m.ali213.net/tag/mfktbjbtmdapptj.html
17.怎么制作透明底的gif智能抠图 手机制作GIF GIF高级定制 搜索 个人VIP买1送10 动图工具特权 全站工具228+功能 高速通道 VIP制作下载专属通道 海量gif搜索 高清gif原图收藏/上传 超值赠送 价值399会员大礼包 终身VIP限时优惠,买1送10(联合VIP) 加入个人VIP 企业VIP 怎么制作透明底的gif优秀案例 https://www.soogif.com/feature/24b4431a
18.白色底变透明PS抠图教程3d溜溜设计问答平台为广大设计师们提供各种白色底变透明PS抠图教程问题解答,3d溜溜素材问答平台汇聚全球各地的设计师、名师名司、设计爱好者等设计灵感和经验,迅速为您解决白色底变透明PS抠图教程的困惑。https://www.3d66.com/answers_relation/relation_1416520.html
19.怎样抠出透明底表情包10秒抠图教程!#透明表情包#抠图记录美好生活 打开看看 @办公技能透明表情包抠图 怎样抠出透明底表情包10秒抠图 展开 @办公技能创作的原声一办公技能 @办公技能创作的原声一办公技能 @办公技能创作的原声一办公技能 200+ 70+ 打开App 打开抖音 再看一遍https://m.douyin.com/share/video/7309035430052252940