当前位置: 首页 > news >正文

vue项目将多张图片生成一个gif动图

当前做项目有一个需求是将多张图片生成一个gif动图的形式

类似下面图片几张图片叠加生成一个gif动图

图片涉及工作隐私,就不公开啦

 我们要引入一个gif.js的引入包,但是他没有直接引入的方式,只能从官方下载文件包,下载地址:git地址

下载好的包找到下面这个两个文件,引入到本地项目中去

将引入进来的两个包中的最后一行代码注释,避免映射

 然后:这里需要对gif.worker进行封装  

在gif.worker.js文件最后声明一个函数,将该文件除了注释部分的代码之外的所有代码复制变成文本,然后给一个变量  

生命的函数将复制的代码文本转化成 blob,然后转化成url的形式

export const gifWorkerContent = ` gif.worker.js文件代码(不要粘贴注释部分)  `export const getGifWorker = () => {const blob = new Blob([gifWorkerContent])return window.URL.createObjectURL(blob)}

然后在需要生成gif的单页面进行引入

 

引入完成之后, 

进行函数处理, 需要获取到所有的地图图片canvas元素,然后通过canvas转换成图片

toGif(item, index) {const _this = thisthis.imgs = []const temDiv = document.getElementById(item + index)this.mapOptionsList[item].forEach((items, index) => {const div = document.getElementById(item + index)const temimg = div.querySelector('canvas')this.imgs.push(temimg) // this.imgs这个数组是所有需要生成gif的图片的集合})// 生成GIFtry {const { width, height } =temDiv.getBoundingClientRect() // 这里定义一下gif图片的大小const gif = new GIF({workers: 2,quality: 10,width,height,workerScript: getGifWorker() // 自定义worker地址})// 对所有的图片进行处理,利用canvas绘制图片this.imgs.forEach((img, index) => {const cv = document.createElement('canvas')cv.width = widthcv.height = heightconst ctx = cv.getContext('2d')ctx.fillStyle = '#fff'ctx.fillRect(0, 0, width, height)ctx.drawImage(img, -20, 0, img.width, img.height)// 这里的img参数内容 要是canvas或者svg或者img的dom元素ctx.fillStyle = '#000' // 这里的fillStyle要注意却分大小写ctx.font = '20px normal'const temname = _this.mapOptionsList[item][index].title.namectx.fillText(temname, 200, 25)ctx.fillStyle = '#000' // 这里的fillStyle要注意却分大小写ctx.font = '20px normal'const temtime = _this.mapOptionsList[item][index].title.timeif (index == 0) {ctx.fillText(temtime, 110, 55)} else {ctx.fillText(temtime, 150, 55)}gif.addFrame(cv, { delay: 1000 })})// 渲染gifgif.render()// 图片合成后gif.on('finished', (blob) => {const a = document.createElement('a')a.href = URL.createObjectURL(blob)a.download = _this.mapOptionsList[item][index].title.texta.click()gif.abort()})} catch (error) {console.log(error)}},

 然后就可以生成gif图片啦 可以看一下下面的图片哦

图片涉及工作隐私就不公开啦

http://www.lryc.cn/news/66058.html

相关文章:

  • 开心档之Go 语言常量
  • 动态库和静态库的使用
  • 前端:20 个常见的前端算法题
  • 【Linux】多线程 --- 线程概念 控制 封装
  • 最长递增子序列的长度 _ 贪心+二分查找 _ 20230510
  • VMware ESXi 7.0 U3m Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)
  • Scrum敏捷开发和项目管理流程及工具
  • 微服务之配置中心
  • windows下安装OpenCL
  • 前端项目的通用优化策略
  • 关于 IO、存储、硬盘和文件系统
  • 计算机网络期中复习提纲-酷酷的聪整理版
  • clickhouse的嵌套数据结构Tuple、Array与Nested类型介绍和使用示例
  • 人脸修复增强调研
  • 【Java】继承和多态
  • ThingsBoard集群部署之k8s
  • 【Gorm】如何在 GORM 中实现模型之间的关联?
  • Linux危险命令
  • FPGA入门系列13--异步串口通信
  • k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容
  • 动态规划算法——40道leetcode实例入门到熟练
  • Nmap入门到高级【第十一章】
  • 配置本地Angular环境并使用VsCode调试Angular前端项目
  • 100ASK_全志V853-PRO开发板支持人形检测和人脸识别
  • 简单实现基于UDP与TCP的回显服务器
  • 家用洗地机有什么推荐的吗?家用洗地机哪款好
  • 深度学习与文本聚类:一篇全面的介绍与实践指南
  • AP5153 线性降压恒流驱动芯片 2.5A
  • Unity物理系统脚本编程(下)
  • 容器技术的发展