如何在 JavaScript 中获取 gif 图像的持续时间

Dap*_*ser 4 javascript image gif settimeout

我只尝试显示一次 gif。所以我使用这段代码来实现这一点。

    var ui_img = document.getElementById("ui_image");
    ui_img.hidden = false;
    setTimeout(function () {
        ui_img.hidden = true;
    }, 8000);
Run Code Online (Sandbox Code Playgroud)

但我知道所有 gif 的持续时间并不相同。我该如何解决这个问题?

Joe*_* DF 5

您可以尝试使用这个库gifuct-js

主要使用parseGIF(), thendecompressFrames()获取一组帧,每个帧具有以下属性delay:帧显示的时间量。因此,您可以将所有帧延迟相加,以获得 GIF 图像的总持续时间。

使用示例 - 来自其 Github 页面的修改后的代码示例:

import { parseGIF, decompressFrames } from 'gifuct-js'

var oReq = new XMLHttpRequest();
oReq.open("GET", gifURL, true);
oReq.responseType = "arraybuffer";

oReq.onload = function (oEvent) {
    var arrayBuffer = oReq.response; // Note: not oReq.responseText
    if (arrayBuffer) {
        var gif = parseGIF(arrayBuffer);
        var frames = decompressFrames(gif, true);
        // do something with the frame data

        // get total time in ms
        var totalTime = frames
            .map(frame => frame.delay)
            .reduce((a, b) => a + b);
    }
};

oReq.send(null);
Run Code Online (Sandbox Code Playgroud)