javascript制作gif动图----gif.js

37 篇文章 1 订阅
30 篇文章 0 订阅
这篇博客介绍了如何利用gif.js库在浏览器中生成和导出GIF动图。通过示例代码展示了如何将多个图片元素或者canvas内容添加到GIF帧中,并设置延迟时间。最后,通过事件监听导出为base64格式的图片。
摘要由CSDN通过智能技术生成

Javascript制作gif动图

gif.js 官网

软件简介 出自开源软件
gif.js 是一个可直接在浏览器上运行的 JavaScript GIF 编码器。支持的浏览器包括:

Google Chrome

Firefox 17

Safari 6

Internet Explorer 10

Mobile Safari iOS 6

使用方法:

var gif = new GIF({
workers: 2,
quality: 10
});

// add an image element
gif.addFrame(imageElement);

// or a canvas element
gif.addFrame(canvasElement, {delay: 200});

// or copy the pixels from a canvas context
gif.addFrame(ctx, {copy: true});

gif.on('finished', function(blob) {
window.open(URL.createObjectURL(blob));
});

gif.render();

JS生成gif并导出base64格式代码

let gifimg1 = document.getElementById('gif1')
let gifimg2 = document.getElementById('gif2')
let gifimg3 = document.getElementById('gif3')
let arr = [gifimg1, gifimg2, gifimg3]

function shezhitupian() {
  return new Promise((resolve, reject) => {
    let gif = new GIF({
      workers: 2,
      quality: 10,
      width: 100,
      height: 100,
      // background: '#ffffff',//原透明色替换为白色
      // transparent: 0xffffff//把图片中的白色替换为gif的透明色
    });
    arr.forEach((item, index) => {
      console.log(item, index)
      let canvas = document.createElement('canvas');
      canvas.width = 100
      canvas.height = 100
      let ctx = canvas.getContext('2d');
      ctx.drawImage(item, 0, 0, 96, 96);
      ctx.font = "bold 20px Arial";
      ctx.fillStyle = "red";
      ctx.fillText("test", 64, 64);
      gif.addFrame(canvas, { delay: 600 });
      if (index == arr.length - 1) {
        //渲染图片
        gif.render();
      }
    })
    //合成图片成功后
    gif.on('finished', function (blob) {
      // console.log(URL.createObjectURL(blob))
      blobToBase64(blob).then(res => {
        resolve({ path: res })
      })
      window.open(URL.createObjectURL(blob));
    });
  })
}
function blobToBase64(blob) {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader();
    fileReader.onload = (e) => {
      resolve(e.target.result);
    };
    fileReader.readAsDataURL(blob);
    fileReader.onerror = () => {
      reject(new Error('blobToBase64 error'));
    };
  });
}
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值