之前使用高德Imagelayer来处理叠加图片
接口给的图片尺寸很大,5700*4800,150k左右 ;这种方式会一直烧内存,32G的电脑有时候都觉得卡,换了客户机器不好的,就直接爆了。尝试了很多次,都没有好的解决办法。最后选择用CanvasLayer来处理。
var context = null
var canvaimg = null
//url 图片地址 是否isfirst第一次加载
CanvasLdImg(url,isfirst = false){
let that = this
if(isfirst == true){
//创建canvas
var canvas = document.createElement('canvas');
canvas.width = 5717;
canvas.height = 4837;
context = canvas.getContext('2d')
//创建图片
canvaimg = new Image();
//跨域 调用的接口是有其他IP的图片地址
canvaimg.setAttribute("crossOrigin",'Anonymous')
canvaimg.src = url;
//onload方法,图片加载完毕,再调用drawImage
canvaimg.onload = function() {
//清理
context.clearRect(0, 0, 5717, 4837)
context.drawImage(canvaimg, 0, 0, 5717, 4837, 0, 0, 5717, 4837);
};
//创建CanvasLayer图层
let CanvasLayer = new AMap.CanvasLayer({
canvas: canvas,
bounds: new AMap.Bounds(
[70,15],[140,54]
),
zooms: [3, 18],
opacity: 0.7,
zIndex:100
});
this.img_layers_list.push(CanvasLayer)
this.map.addLayer(CanvasLayer);
}
else{
canvaimg = new Image();
canvaimg.src = url
canvaimg.setAttribute("crossOrigin",'Anonymous')
if (canvaimg.complete) { // 如果图片已经存在于浏览器缓存,直接调用回调函数
context.clearRect(0, 0, 5717, 4837) //清理
context.drawImage(canvaimg, 0, 0, 5717, 4837, 0, 0, 5717, 4837);
return; // 直接返回,不用再处理onload事件
}
canvaimg.onload = function() {
context.clearRect(0, 0, 5717, 4837) //清理
context.drawImage(canvaimg, 0, 0, 5717, 4837, 0, 0, 5717, 4837);
};
}
}

的确丝滑多了。