如何计算动画 gif 循环的次数并在 javascript 中显示该计数?

Posted

技术标签:

【中文标题】如何计算动画 gif 循环的次数并在 javascript 中显示该计数?【英文标题】:How to count how many times an animated gif loops and display that count in javascript? 【发布时间】:2021-12-04 16:50:07 【问题描述】:

有没有办法显示动画 gif 循环的次数?例如,您登陆一个带有动画 gif 的页面,当该 gif 完全循环其动画一次时,将显示 1。每次 gif 完全循环时,该数字都会增加 1。永远。

感谢您的任何见解!

【问题讨论】:

【参考方案1】:

我计算 gif 的持续时间,然后 setInterval。 我的 gif 有 15 秒长。

const gif = document.getElementById("gif");
    gifLoopCounterInit(gif.src);
    function gifLoopCounterInit(fileSrc) 
        var request = new XMLHttpRequest();
        request.open('GET', fileSrc, true);
        request.responseType = 'arraybuffer';
        request.addEventListener('load', async function () 
            calcDurationGif(request.response).then(function (duration) 
                const loopCounter = document.getElementById("loop-counter");
                setInterval(function () 
                    loopCounter.innerhtml++;
                , duration * 1000);
            );
        );
        request.send();
    
    function calcDurationGif(file) 
        return new Promise((resolve, reject) => 
            try 
                let arr = new Uint8Array(file);
                let duration = 0;
                for (var i = 0; i < arr.length; i++) 
                    if (arr[i] == 0x21
                        && arr[i + 1] == 0xF9
                        && arr[i + 2] == 0x04
                        && arr[i + 7] == 0x00) 
                        const delay = (arr[i + 5] << 8) | (arr[i + 4] & 0xFF)
                        duration += delay < 2 ? 10 : delay;
                    
                

                console.log(duration / 100);
                resolve(duration / 100);
             catch (e) 
                reject(e);
            
        );
    
<img id="gif" src="https://c.tenor.com/AeFQKHQFFq8AAAAd/gif-art.gif" >
    <p>Loops : <span id="loop-counter">0</span> </p>

【讨论】:

以上是关于如何计算动画 gif 循环的次数并在 javascript 中显示该计数?的主要内容,如果未能解决你的问题,请参考以下文章

iOS FLAnimatedImage控制Gif播放次数

iOS FLAnimatedImage控制Gif播放次数

制作GIF动画

在颤动中单击时停止 GIF 动画

如何从 for 循环中为 matplotlib 图设置动画

循环中的 MATLAB getframe 冲突以创建动画 gif