当前位置: 首页>編程日記>正文

gif图片解析与生成(GIF+文字动效)

gif图片解析与生成(GIF+文字动效)

  • github: https://github.com/baixc1/csdn/tree/master/js/mk-gif
  • 生成 gif 图(平移+旋转+缩放)
    在这里插入图片描述
  • 解析 GIF 图片 (生成每帧图片的base64)
    • libgif.js 插件
    • 生成 GIF 实例
    • 解析每一帧
    • 需要在服务器端运行(node server.js),然后访问根目录
 var rub = new SuperGif({ gif: img })rub.load(() => {const imgs = []const len = rub.get_length()for (let i = 1; i <= len; i++) {rub.move_to(i)      //遍历gif实例的每一帧imgs.push(rub.get_canvas().toDataURL('image/jpeg', 0.6))}})
  • 合成帧
    • 需要gif.js,gif.worker.js脚本
    • 新 gif实例 ,添加画布作为帧
    • 画布上合成之前帧和新的文字
let gif = new GIF({workers: 2,quality: 10,workerScript: './gif.worker.js'
});
function mkgif(imgs) {gif.on('finished', blob => {        //生成新GIF})let i = 0let len = imgs.lengthimgs.forEach((item, index) => {	//遍历每一帧,加字let img = new Image()img.src = itemimg.onload = () => {ctx.drawImage(img, 0, 0, imgW, imgH);   //GIF帧gif.addFrame(canvas, { copy: true, delay: 100 })  //canvas生成帧if (++i >= imgs.length) {       //已添加所有帧gif.render()}}})
}
  • 整体代码实现
<!DOCTYPE html>
<html>
<script src="libgif.js"></script>
<script src="gif.js"></script><body><img id="myGIF" src="1.gif" />
</body>
<script>let img = document.getElementById('myGIF')img.onload = function () {let { width: imgW, height: imgH } = thislet gif = new GIF({workers: 2,quality: 10,workerScript: './gif.worker.js'});//需在服务器端运行let rub = new SuperGif({ gif: img })rub.load(() => {let { delays } = rubconst imgs = []const len = rub.get_length()for (let i = 1; i <= len; i++) {rub.move_to(i)      //遍历gif实例的每一帧imgs.push({url: rub.get_canvas().toDataURL('image/jpeg', 0.6),delay: delays[i - 1]})}mkgif(imgs)})/*** 1. 文字+图片,合成新gif* 2. 使用库:gif.js, gif.worker.js*/function mkgif(imgs) {let canvas = document.createElement("canvas");let ctx = canvas.getContext('2d');canvas.width = imgW;canvas.height = imgH;gif.on('finished', blob => {        //生成新GIFlet url = URL.createObjectURL(blob)console.log(url)let img = document.createElement('img')img.src = urldocument.body.appendChild(img)})let i = 0let len = imgs.lengthimgs.forEach((item, index) => {let { url, delay } = itemlet img = new Image()img.src = urlimg.onload = () => {ctx.clearRect(0, 0, imgW, imgH)     //清除画布(避免影响下一帧)ctx.drawImage(img, 0, 0, imgW, imgH);   //GIF帧ani({ ctx, index, len, })               //文字gif.addFrame(canvas, { copy: true, delay })  //canvas生成帧if (++i >= imgs.length) {       //已添加所有帧gif.render()}}})}}//动画前后状态//动画 - 旋转let rotateStart = 0let rotateEnd = 360//动画 - 平移let translateStartX = 100let translateStartY = 100let translateEndX = 400let translateEndY = 400//旋转let scaleStart = 1let scaleEnd = 0.5//字体let fontSize = 40let txt = "Hello World"function ani({ctx, index, len,}) {let rotateVal = rotateStart + index * (rotateEnd - rotateStart) / lenctx.font = `${fontSize}px Georgia`let xText = translateStartX + index * (translateEndX - translateStartX) / lenlet yText = translateStartY + index * (translateEndY - translateStartY) / lenlet scaleVal = scaleStart + index * (scaleEnd - scaleStart) / lenlet { width: wText } = ctx.measureText(txt)let hText = fontSizectx.save()          //状态保存,避免多次操作ctx.scale(scaleVal, scaleVal)               //缩放//旋转中心点(思路:https://blog.csdn.net/weixin_41837346/article/details/105488936)ctx.translate(xText + wText / 2, yText - hText / 2)deg = Math.PI / 180 * rotateValctx.rotate(deg, deg)ctx.fillText(txt, -wText / 2, hText / 2)ctx.restore()           //状态恢复}
</script></html>


https://www.fengoutiyan.com/post/15860.html

相关文章:

  • 在线gif上添加文字
  • gif图片转换
  • gif 生成
  • gif生成在线制作
  • gif转成图片
  • 动态字体生成器
  • 文字GIF动画生成
  • 如何给gif图片加文字
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機