Cesium Canvas2Image for循环批量截图

功能需求:需要飞到一个场景截图一张,然后再刚飞到另一个地方再截图一张

涉及到同步和异步的问题,这里使用async,await,Promise解决

//md_Extents[j].md_Extent存放图形的边界四至, west,south,east,north
for (let i = 0; i < md_Extents[j].md_Extent.length; i++) {
	await md_ExtentsFlyTo(md_Extents[j].md_Extent[i]);
}

//Canvas2Image通过html页引用Canvas2Image.js
function md_ExtentsFlyTo(data) {
	var p = new Promise(function (resolve, reject) {
		//做一些异步操作
		setTimeout(() => {
			viewer.camera.setView({
				destination: Cesium.Rectangle.fromDegrees(data.extent[0], data.extent[1], 
                data.extent[2], data.extent[3]),
			});
			var imageWidth = 800;
			var img = Canvas2Image.convertToImage(viewer.scene.canvas, imageWidth, 
           (imageWidth * viewer.scene.canvas.height) / viewer.scene.canvas.width, "png");
			var base64url = viewer.scene.canvas.toDataURL("image/png");
			var file = base64ImgtoFile(base64url);

			//测试截图效果
			/* var loadImg = document.createElement("a");
			loadImg.href = img.src;
			loadImg.download = "earth";
			loadImg.click(); */

			exportWordFiles.push(file);
			exportWordGids.push(data.gid);
			resolve("截完了");
		}, 1000);
	});
	return p;
}

function base64ImgtoFile(dataurl) {
	let arr = dataurl.split(",");
	let filename = "file";
	let mime = arr[0].match(/:(.*?);/)[1];
	let suffix = mime.split("/")[1];
	let bstr = atob(arr[1]);
	let n = bstr.length;
	let u8arr = new Uint8Array(n);
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n);
	}
	return new File([u8arr], `${filename}.${suffix}`, {
		type: mime,
	});
}

猜你喜欢

转载自blog.csdn.net/chenguizhenaza/article/details/114395880