1、项目场景

实际开发中我们经常会有动图加载的需求,而Cesium不支持纹理贴动图,怎么样基于Cesium实现动图的加载,值得我们研究一波。cesium加载gif格式的动图有些场景能够满足我们的需求,但是有时候,图像的质量不高,颗粒感很明显,会有杂边,如何解决这个难题,又值得我们进入深层次的研究。


2、解决方案

首先,查阅相关资料,容易得知:动图的格式有很多种,主要有gif、png、flv、swf等格式。而gif是我们最常见的动图格式,它的原理是通过对多帧图片按时间序列进行切换,从而达到动画的效果。apng格式动画原理和gif差不多。gif的特点是牺牲质量来降低大小,图像信息比较多的情况下,颗粒感明显,会有杂边。apng是普通png图片的升级版,它的后缀依然是.png,包含动态的情况下大小会比普通静态png大出数倍,但是可以做到无损动态展示。

其次,了解了apng动图优势过后,考虑到Cesium的Billboard支持单帧纹理贴图,如果能够将apng动图进行解析,获得时间序列对应的每帧图片,然后按照时间序列动态更新Billboard的纹理,即可实现动图纹理效果。

然后,我们如何进行apng动图的解析?经过不懈的探寻,发现apng-js第三方库能够将apng转化为一帧帧图像,正好能够满足我们的需求!!!

注:apng-js第三方库需要经过优化,才能通过script标签直接引用,优化后的链接已奉上!


3、编码实现

/*** 加载apng*/
async function loadApng() {let url = '../../assets/images/wind.png'let canvas = document.createElement('canvas')let ctx = canvas.getContext('2d')let blob = await loaderURL(url)let arrayBuffer = await blobToArrayBuffer(blob)let apng = apngjs.parseAPNG(arrayBuffer)let player = await apng.getPlayer(ctx)player.play()let entity = viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(point[0], point[1]),billboard: {scale: 2}})entity.billboard.image = new Cesium.CallbackProperty(() => {return player.currentFrame.imageElement}, false)
}

​完整demo可参见practicalCesiumDemos中loadApng。


4、成果展示

cesium加载动图方案三:通过apng-js库实现相关推荐

  1. Android 高清加载巨图方案 拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处:  http://blog.csdn.net/lmj623565791/article/details/49300989:  本文出自: ...

  2. 高清加载巨图方案-拒绝压缩图片

    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49300989: 本文出自:[张 ...

  3. Fresco本地加载【圆角,圆形,比例,渐进,加载动图】

    导入依赖 implementation 'com.facebook.fresco:fresco:0.13.0'//fresco依赖implementation 'com.facebook.fresco ...

  4. Android_高清加载巨图方案 拒绝压缩图片

    原文出处:http://blog.csdn.net/lmj623565791/article/details/49300989 一.概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么 ...

  5. Android 高清加载巨图方案 拒绝压缩图片 避免oom

    一.概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么就先来一篇简单一点的博客脉动回来. 对于加载图片,大家都不陌生,一般为了尽可能避免OOM都会按照如下做法: 对于图片显示:根据需 ...

  6. python 加载动图_在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    大数据文摘授权转载自数据派THU 作者:MOHD SANAD ZAKI RIZVI 本文主要介绍了: TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习 ...

  7. vue +websocket 加载动图并实现暂停与播放

    需求一:页面有小动图点击放大并实现暂停与播放 1.页面调用+点击放大以及调用组件时实现标题效果 <div class="" v-show="WRFgif" ...

  8. 加载动图的实现及属性动画的使用

    昨天在一个APP上面看见一个吃东西的加载图,感觉挺简单的,于是打算去实现.但是在实现的过程中踩了一些坑,那个图也不能找到做参考了,于是自己琢磨了一个下午,终于实现了效果.因此这里将整个过程做一个复盘, ...

  9. 推荐一个加载动图的网站loading.io

    推荐一个非常好玩的loading gif的资源网站:https://loading.io/ 里面有各种loading的动图. 转载于:https://www.cnblogs.com/zifeiy/p/ ...

最新文章

  1. 开源生态也难逃“卡脖子”危机?中国AI开发者的警醒和突围
  2. 【Network Security!】关于DDOS攻击的现状分析与探索
  3. POJ2118基础矩阵快速幂
  4. asp.net core 系列之Performance的 Response compression(响应压缩)
  5. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
  6. mysql安装忘了root_MySQL - 安装:MySQL忘记root密码的解决办法
  7. 一加7T系列发布时间公布:9月26日北美和印度率先亮相
  8. hive创建java函数_spark通过java的api创建hive的UDF用户自定义函数
  9. Illustrator 教程,如何在 Illustrator 中创建无缝平铺图案?
  10. 使用jdk1.8 新特性stream实现多级分类
  11. javascript函数的参数类型
  12. x64 - reject driver loading
  13. WS2811是三通道LED驱动控制专用电路彩灯带专用方案开发IC
  14. 如何把图片制作成GIF动图?GIF图是怎样合成的?
  15. 优酷中转码是什么意思
  16. 新生儿登记-申办报告
  17. 机器学习和深度学习相关问题总结
  18. 微信小程序开放平台代码部署特约商户
  19. 公务员面试七大忌讳(1)
  20. Mac: 账户失去了管理员权限,怎么办?!网上流行的和没见过的都在这里。

热门文章

  1. WIN10打开网络共享文件夹提示0x80004005怎么解决?(转载)
  2. uni-app—使用vscode创建小程序项目(图文)
  3. Speedoffice(excel)如何自动换行
  4. 【C++编程题】字符串子串替换
  5. Python 3中 mp3play module 的使用
  6. acc 蓝牙_蓝牙耳机≠音质差,只是你没选对耳机
  7. 抖音xlog算法解析
  8. 从 Uber 数据泄露事件我们可以学到什么?
  9. css设置格子背景,跟本子一样
  10. office2016选中、编辑突然变慢