cesium实现截屏保存图片路程

1.首先需要引入插件canvas2image.js用来将canvas转图片

cesium也是基于canvas容器实现webgl,canvas可以直接将内容保存成图片:canvas2image。我们只需要获取到cesium的容器canvas就可以直接保存为图片了: 

var canvas = viewer.scene.canvas;

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

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

 image.src = genimg.src;

2.运行控制台报错:Blocked script execution in 'about:blank' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.

分析:因为infoBox是Ifram框架,H5的新安全机制不允许在其中执行脚本,如果在里面写了类似于点击事件的脚本,则会提示如下错误:

解决方法有两个:

     1.禁用infobox,自己设计信息面板。

     2.设置沙箱的权限

var iframe = document.getElementsByClassName('cesium-infoBox-iframe')[0];

iframe.setAttribute('sandbox', 'allow-same-origin allow-scripts allow-popups allow-forms'); 

3.结果运行无法得到场景截图,是空白:

场景截图需要开启:preserveDrawingBuffer。

viewer初始化设置:

contextOptions: {
            //cesium状态下允许canvas转图片convertToImage
          webgl: {
              alpha: true,
              depth: false,
              stencil: true,
              antialias: true,
              premultipliedAlpha: true,
              preserveDrawingBuffer: true,
              failIfMajorPerformanceCaveat: true
          },
          allowTextureFilterAnisotropic: true
        },

之后便可以将截屏保存到标签img中

4.想要将截屏下载到本地

 /**
     * 在本地进行文件保存
     * @param  {String} data     要保存到本地的图片数据(img的src)
     * @param  {String} filename 文件名
     */
    var saveFile = function(data, filename){
        var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
        save_link.href = data;
        save_link.download = filename;

        var event = document.createEvent('MouseEvents');
        event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        save_link.dispatchEvent(event);
    };

5.若需要将除cesium以外的dom加入到截屏中,需要借助html2canvas插件来实现,引入html2canvas

将第1步替换:

var test = $("body").get(0); //将jQuery对象转换为dom对象
    // 点击转成canvas
    $('#btn').click(function(e) {
        // 调用html2canvas插件
        html2canvas(test).then(function(canvas) {
            // canvas宽度
            var canvasWidth = canvas.width;
            // canvas高度
            var canvasHeight = canvas.height;

                // 调用Canvas2Image插件转图片
            var img = Canvas2Image.convertToImage(canvas, canvasWidth, canvasHeight);
            var image = document.getElementById('image');
            //保存到img标签中
            image.src = img.src;

            // 调用保存到本地的方法下载图片
            saveFile(image.src, "aa.png")
        });
    });

 

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Cesium是一种开源的虚拟地球浏览器,可以用于呈现三维地球上的地理空间数据。Cesium通过其强大的图形渲染引擎和开放的插件系统,可以实现流动效果。 要实现流动,首先需要将动态数据加载到Cesium中。Cesium支持各种数据格式,如GeoJSON、KML、Shapefile等,可以通过加载这些数据文件来获取实时或历史地理空间数据。数据可以包含地球表面上的对象,例如河流、风向、海洋流等。将这些数据加载到Cesium中后,即可在三维地球上呈现流动效果。 在数据加载后,可以使用Cesium提供的API来实现流动效果。例如,可以使用Cesium的动画功能来控制时间流逝,并在地球上移动对象。这样,地球上的河流、风向箭头或海洋流线就可以随着时间的推移动态展示其流动状态。通过调整时间流逝的速度和其他动画参数,可以实现不同的流动效果,从而更好地展示地理空间数据。 此外,Cesium还支持自定义流动效果。开发人员可以使用Cesium的开放插件系统创建自定义的流动效果。通过使用Cesium的图形渲染引擎和JavaScript编程接口,可以实现各种各样的流动效果,满足不同的需求和创意。 总之,Cesium通过其强大的图形渲染引擎和开放的插件系统,可以实现流动效果。通过加载动态数据,并使用Cesium的动画功能或自定义插件,可以在三维地球上展示各种流动状态的地理空间数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值