前端生成gif动态图下载

最近公司的某产品中,有动态热图的展现,分别展现某个时间段的热图时间变化,例如:最近一周七天内,每天的热图分布变化图;客户提出一个需求,这个动态变化的图生成一个gif图提供下载是否可行?

实现方案:
1.可通过服务端生成对应gif,然后前端请求下载
2.前端自己实现生成gif图片,自行下载

采用方案:
前端实现方式,于是在网上找各种相关的几款组件调研,均有利弊,推荐两款好用并且稳定的组件:
1 html2canvas.js 官网:http://html2canvas.hertzen.com/

2 gif.js 官网:https://jnordberg.github.io/gif.js/

 

下面具体记录下方案2的实现过程,逻辑拆分为3步:

1.html元素生成base64位图片
2.生成的图片对象转化为gif动态图
3.下载gif图片

话不多说,直接上主要代码:

html2canvas有node包版本的

 

import html2canvas from 'html2canvas';

 

 

 

但gif.js暂未发现node包版本,可采用cdn方式引入

<script type="text/javascript" src="https://imgss.github.io/demo/gif/gif.js"></script>

 

 

      //要转换为图片的dom对象
      var element = document.querySelector('.real-map');
      //要显示图片的img标签
      var image = document.querySelector('#imgaaa');
      var imageccc = document.querySelector('#imgccc');

      html2canvas(element,{allowTaint: true}).then(function(canvas) {  
              
                  var imageData = canvas.toDataURL(1);
                  image.src = imageData;

                  var arr=[
                    image,
                    imageccc
                  ];

                  setTimeout(function(){

                      //调用gif对象方法
                      var gif = new window.GIF({
                        workers: 2,
                        quality: 10,
                        workerScript:'https://imgss.github.io/demo/gif/gif.worker.js'
                      });
                      
                      //遍历图片对象
                      arr.map(item=>{
                        gif.addFrame(item, {delay: 1000});
                      });

                      gif.on('finished', function(blob) {
                        
                        //下载动作
                        var el = document.createElement('a');
                        el.href = URL.createObjectURL(blob);
                        el.download = 'demo-name'; //设置下载文件名称
                        document.body.appendChild(el);
                        var evt = document.createEvent("MouseEvents");
                        evt.initEvent("click", false, false);
                        el.dispatchEvent(evt);
                        document.body.removeChild(el);

                      });
                      
                      gif.render();

                  },1000)
                  

          }  
      );  

以下为Demo:

js部分:

import pic1 from './images/1.png'

document.getElementById('imgccc').src=pic1

//要转换为图片的dom对象
var element = document.querySelector('.real-map');
//要显示图片的img标签
var image = document.querySelector('#imgaaa');
var imageccc = document.querySelector('#imgccc');

var btn = document.querySelector('#btn');

btn.onclick=()=>{
  
  html2canvas(element,{allowTaint: true}).then(function(canvas) {  
        
    var imageData = canvas.toDataURL(1);
    image.src = imageData;

    var arr=[
      image,
      imageccc
    ];

    setTimeout(function(){

        //调用gif对象方法
        var gif = new window.GIF({
          workers: 2,
          quality: 10,
          workerScript:'https://imgss.github.io/demo/gif/gif.worker.js'
        });
        
        //遍历图片对象
        arr.map(item=>{
          gif.addFrame(item, {delay: 1000});
        });

        gif.on('finished', function(blob) {
          
          //下载动作
          var el = document.createElement('a');
          el.href = URL.createObjectURL(blob);
          el.download = 'demo-name'; //设置下载文件名称
          document.body.appendChild(el);
          var evt = document.createEvent("MouseEvents");
          evt.initEvent("click", false, false);
          el.dispatchEvent(evt);
          document.body.removeChild(el);

        });
        
        gif.render();

    },1000)
    
  }); 
}

html部分:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title></title>
</head>
<body>

	<!-- 用户生成图片的div区域,将付给imgaaa -->
	<div class="real-map">
		<div>
			这里是html的元素内容区域
		</div>
		<div>
			这里是html的元素内容区域2
		</div>
	</div>

	<img id="imgaaa" />
	<img id="imgccc" src="" />

	<button id="btn">点击生成</button>
	
	<script type="text/javascript" src="https://imgss.github.io/demo/gif/gif.js"></script>
</body>
</html>

css部分

.real-map{
	width:100px;
	height:100px;
	border:1px solid #ccc;
	line-height:24px;
}
#imgccc{
	background:#fff;
	width:100px;
	height:100px;
}

效果:


简简单单,兢兢业业,走你!

 

 

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值