要读取某网页,然后将这个网页的图片做裁剪处理,单个图片处理没有任何问题,但是只要把FOR循环放进去,用来批量处理所有图片,就无法读到图片了。
要处理的网站:https://mbd.baidu.com/newspag...
for (var i=0;i<document.getElementsByClassName('contentImg linexRBS').length;i++)
{
var tupianwidth=document.getElementsByClassName('contentImg linexRBS')[i].offsetWidth;
var tupianheight=document.getElementsByClassName('contentImg linexRBS')[i].offsetHeight;
tupianheight=tupianheight-20;
var targetImg = new Image();
targetImg.crossOrigin = '';
targetImg.src =document.getElementsByClassName('contentImg linexRBS')[i].getElementsByTagName("img")[0].src;
targetImg.onload = (function(){
var canvas = document.createElement('canvas');
canvas.width = tupianwidth;
canvas.height= tupianheight;
var cxt = canvas.getContext('2d');
cxt.drawImage(targetImg,0,0);
var clipImage = canvas.toDataURL("image/png",1);
document.getElementsByClassName('contentImg linexRBS')[i].getElementsByTagName("img")[0].src=clipImage;
})(i);
}
问题提的很好,
主要问题在于,图片onload使用和匿名函数自执行这块。因为你已经使用了canvas,必然会处理兼容性问题,所以完全可以使用let 节省大量代码和充分发挥let的块级作用域优势。
以上代码仅供参考,注意三点:
1.我用的本地图片,如果你是网上图片需要处理跨域。
2.注意性能,比如预先存储 let len = arrImg.length等。
3.尽量使用ES6简化代码。
希望我的回答对你有用,加油!