cesium 保存图片、缩略图、鹰眼

要保存cesium场景图片,很简单把cesium所在的canvas保存为一张图片并下载就行了。完全不用cesium的代码API(震惊Σ(☉▽☉"a)。

// 保存为图片并下载
            function savePic(){
                var canvas =viewer.scene.canvas;
                var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");

                var link = document.createElement("a");
                var strDataURI = image.substr(22, image.length);
                var blob = dataURLtoBlob(image);
                var objurl = URL.createObjectURL(blob);
                link.download = "pic.png";
                link.href = objurl;
                link.click();

                function  dataURLtoBlob(dataurl) {
                    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
                        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
                    while(n--){
                        u8arr[n] = bstr.charCodeAt(n);
                    }
                    return new Blob([u8arr], {type:mime});
                }

            };

唯一要注意的是canvas.toDataURL不能直接保存image和png这是由于保护机制,所以一定要跟replace后面的流转换。

如果要获取当前场景的快照,类似于缩略图的话

                var canvas = viewer.scene.canvas;

                var genimg = Canvas2Image.convertToImage(canvas, 400, 400 * canvas.height / canvas.width, 'png');

                var image = document.getElementById('image');

                image.src = genimg.src;

通过cesium的canvas转换成image在创建一个canvas展现出来,并绘制到新的div上。

鹰眼更简单,再次创建一个球,保持视角一样就行了

 let viewer2  = new Cesium.Viewer('eye',{
        imageryProvider: GoogleMap,
        animation: false,
        baseLayerPicker: false,
        fullscreenButton: false,
        geocoder: false,
        homeButton: false,
        sceneModePicker: false,
        selectionIndicator: false,
        timeline: false,
        navigationHelpButton: false,
        infoBox: false,
        navigationInstructionsInitiallyVisible: false
    });

    let control = viewer2.scene.screenSpaceCameraController;
    control.enableRotate = false;
    control.enableTranslate = false;
    control.enableZoom = false;
    control.enableTilt = false;
    control.enableLook = false;
    let syncViewer = function(){
        viewer2.camera.flyTo({
            destination : viewer.camera.position,
            orientation : {
                heading : viewer.camera.heading,
                pitch : viewer.camera.pitch,
                roll : viewer.camera.roll
            },
            duration: 0.0
        });
    }
    viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(0, 0),
        label: {
            text: new Cesium.CallbackProperty(function(){
                syncViewer();
                return "";
            }, true)
        }
    });
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文适用人群 需要在微信wap页开发分享海报功能的前端程序员们 想要了解html2canvas库的吃瓜群众 挣扎在...
    朝颜vivian阅读 13,458评论 4 17
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    J_L_L阅读 5,478评论 0 4
  • 参考资料:https://cesiumjs.org/tutorials/Cesium-Workshop/ http...
    布谷李阅读 8,779评论 0 0
  • 我一直觉得自己是个挺花心的人,这里说的花心不是说针对人,而是对事。 比如说我总是在看着这本书的时候想着下一本书。 ...
    凌雪懿阅读 2,372评论 0 1
  • 今日第十届百日跑正式开赛(4.22-8.19),继续开始训练,用双脚感受跑步的乐趣。跑完打开百日跑公众号打卡,第十...
    山青水秀桃花红阅读 1,459评论 0 1

友情链接更多精彩内容