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

news/2024/11/20 23:22:09/

当前做项目有一个需求是将多张图片生成一个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.ppmy.cn/news/63402.html

相关文章

Linux进程状态及优先级

本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 进程状态及优先级 前言正文进程状态就绪运行状态R阻塞睡眠状态 S休眠状态D挂起 暂停状态T前台与后台进程待追踪暂停状态t 死亡状态 X僵尸状态 Z 孤儿进程进程优先级查…

视频播放方案

video插件播放m3u8格式视频(存原生) 这里使用原生的javascript实现m3u8格式视频播放。 使用了包括video.min.js库和HLS插件。 1-基础使用 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Video.js HLS Example</title…

SIM800C-AT指令测试(二) SMS短消息

相关的AT主要有&#xff1a; ATCPMS // 查询SIM卡内短消息使用状态 ATCNMI // 新消息指示设置 ATCMGF // 选择短消息格式 ATCSCS // 编码设置 ATCSCA // 查…

ChatGPT 探讨内存屏障的意内存

一、与 ChatGPT 探讨内存屏障的意内存 轻松的氛围&#xff0c;跟 ChatGPT 从内存屏障问题一直扯到CAP原理 我&#xff1a; 2023/4/14 17:48:09 那我可以理解为{ shared_var 1; asm volatile ("sfence" ::: "memory"); asm volatile ("lfence" …

一键免费部署你的私人 ChatGPT 网页应用-ChatGPT Next Web

ChatGPT-Next-Web是一款基于GPT-3.5的在线聊天机器人应用程序。它可以自动回复用户输入的消息&#xff0c;并提供有用的信息和服务。该应用程序使用了最先进的自然语言处理技术和GPT-3.5模型&#xff0c;可以生成自然流畅的文本&#xff0c;并提供准确和个性化的回复。 项目地…

网络原理(五):IP 协议

目录 认识IP 地址 子网掩码 作用 动态分配IP 地址 NAT 机制 认识MAC地址 MAC地址如何工作 认识IP 地址 概念&#xff1a; IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;又译为网际协议地址。 作用&#xff1a; IP地址是I…

​#立夏# 气温升高,3招提高电路板的散热效率!

电路板是电子设备的核心&#xff0c;上面安装了各种元器件&#xff0c;如电阻、芯片、三极管等。这些元器件在工作时都会产生一定的热量&#xff0c;从而使电路板的温度升高。如果不及时将这些热量散发出去&#xff0c;电路板就会过热&#xff0c;影响元器件的性能、可靠性和寿…

使用lvm命令修改Ubuntu swap分区

lvm命令管理磁盘分区灵活方便。 使用这个命令前提是在安装时选择用lvm管理磁盘。 使用lvm命令 2种方式使用lvm命令&#xff1a; 1&#xff09;执行lvm命令&#xff0c;进入交互操作&#xff0c;使用其子命令&#xff0c;如&#xff1a;lvscan、lvextends等。 2&#xff09;lv…