cesium1.92及以上版本截图功能

475 阅读1分钟

在cesium1.92版本, when.js 被原生 Promise API 代替。Cesium.when 被废弃。下面分享原生Promise实现cesium场景截图功能。

function screenshot() {
    const screenshot = new Promise<string>((resolve, reject) => {
        viewer.render()
        const image = viewer.scene.canvas.toDataURL('image/png')
        resolve(image)
    })
    screenshot.then((base64data: string) => {
        const image = new Image()
        image.src = base64data
        function coverImageToCanvas(image: HTMLImageElement) {
            const canvas = document.createElement('canvas')
            canvas.width = image.width
            canvas.height = image.height
            canvas.getContext('2d')!.drawImage(image, 0, 0)
        }
        image.onload = function () {
            const canvas = coverImageToCanvas(image)
            const url = canvas.toDataURL('image/png')
            const a = document.createElement('a')
            const event = new MouseEvent('click')
            const currentTime = new Date(new Date().getTime()).toLocaleString()
            a.download = `快照${currentTime}.png`
            a.href = url
            a.dispatchEvent(event)
        }
    })
}