JS图像处理:找出两张图片的差异部分并提取出来

 

两张图片比较

需求:

图A:

 

 

图B

 

 

图A图B尺寸相同,最后需求得到结果如图C:

 

 

 

 

关键API:

var imgData=context.getImageData(x,y,width,height);

参数值

参数描述
x开始复制的左上角位置的 x 坐标。
y开始复制的左上角位置的 y 坐标。
width将要复制的矩形区域的宽度。
height将要复制的矩形区域的高度。

 

首先获取图B的像素点数据 var pixelData = canvas .getContext("2d") .getImageData(0, 0, img.width, img.height).data; for (var i = 0; i < pixelData.length; i += 4) { if ( pixelData[i] < 10 && pixelData[i + 1] < 10 && pixelData[i + 2] < 10 ) { this.frameData[idx] = [i]; idx++; } }

由于js没有提供image类处理的API,需将加载的图像用canvas画出来。
getImageData().data可取得图像所有像素点的RGBA值的数组,按[a.r,a.g,a.b,a.a,b.a,b.g,b.b,b.a....]排列,
所以pixelData[i],pixelData[i + 1],pixelData[i + 2]则为某像素点的RGB值,均小于10取接近黑色的像素点,则为图B的黑框。最后将数据保存到数组。

然后同理取得图A的像素点数据,然后取之前保存的B图黑色外框的下标值,进行重新赋值。这里赋值成255,则为白色,与背景颜色相同,达到去除图A外框的效果。

     var pixelData = canvas .getContext("2d") .getImageData(0, 0, img.width, img.height).data; 
for (var i = 0; i < pixelData.length; i += 4) 
{ 
if ( pixelData[i] < 10 && pixelData[i + 1] < 10 && pixelData[i + 2] < 10 ) 
{ 
this.frameData[idx] = [i]; idx++;
} 
}

最后通过canvas.toDataURL获取图片的base64值,保存为图片

完整代码见

http://icelily.xyz/wordpress/?p=119

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值