canvas 画布动态效果转换为gif

 canvas + gif.js  将canvas 转换为gif 

gif的github 地址   需要的文件在 dist目录下  gif.js  和 gif.worker.js

在页面引入gif.js

 

NameDefaultDescription
repeat0gif 是否重复播放 0 为重复 -1 不重复
quality10像素采样间隔,越低越好
workers2工作者数量
workerScriptgif.worker.js从以下网址加载工作程序脚本的网址
background#fff源图像透明的背景色
widthnull输出图像宽度
heightnull输出图像高度
transparentnull透明的十六进制颜色,0x00FF00=绿色
ditherfalse

抖动方法,例如 FloydSteinberg-serpentine  

 

 

可用的抖动方法是:

  • FloydSteinberg
  • FalseFloydSteinberg
  • Stucki
  • Atkinson
debugfalse是否将调试信息打印到控制台

 

addFrame options

NameDefaultDescription
delay500每一帧的切换时间
copyfalsecopy the pixel data
dispose-1frame disposal code. See GIF89a Spec
<canvas width="200" height="200" id="canvas"></canvas>    //画布对象
<img src="aa/load2.png" id="img"> // gif第一针
<img src="" id="result"> // 返回的结果 格式为gif

 window.onload = function () {
        var oImg = document.getElementById("img");
        var canvas = document.getElementById('canvas');
        var ctx = canvas.getContext('2d')

        let gif = new GIF({  // 创建gif对象
			repeat:0,
            workers: 4,
            quality: 30,
            workerScript: "js/gif.worker.js",
            transparent: "#fff",
            // background: 'rgba(0,0,0,0)',
        });
        gif.on("finished",function(blob){ // 渲染完毕 
              // URL.createObjectURL(blob); 将blob转换为可访问的url
            var file = new FileReader();
            file.readAsDataURL(blob);
            file.onload = function(){
                document.getElementById("result").setAttribute("src", file.result)
            }

        })
        var imgList = [];
		for (var i = 0; i < 89; i++) { // 图片帧序列    
			imgList.push( './aa/load'+(i+2)+'.png' )
		}

      
        var imgObjList = [],count = 0;

        for (let i=0; i<imgList.length; i++){
            var tmpImg = new Image();
            imgObjList.push(tmpImg);
            tmpImg.src = imgList[i];
            tmpImg.onload = function () {
                count++;
                if (count === imgList.length ){
                    generateGif(imgObjList);
                }
            }
        }


        function generateGif(imgObjList) {

            for (let i=0;i<imgObjList.length;i++){
                ctx.save();
                ctx.drawImage(oImg,0,0,200,200);
                ctx.drawImage(imgObjList[i],0,0,canvas.width,canvas.height);
                ctx.restore();
                gif.addFrame(canvas,{copy:true,delay:1000/30})
                ctx.clearRect(0,0,canvas.width,canvas.height)
            }
            gif.render();
        }

    }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值