diff options
| author | stonedDiscord <Tukz@gmx.de> | 2022-03-11 18:15:55 +0100 |
|---|---|---|
| committer | stonedDiscord <Tukz@gmx.de> | 2022-03-11 18:15:55 +0100 |
| commit | 52b79f4b5ffce7679fa5fcceeb80d615ad0cdf16 (patch) | |
| tree | affeaf0853a067abe7590dac077c4f1c40f82945 /webAO/utils/calculateApngLength.js | |
| parent | 7c5fac67edf4e265176d57b714bd21cdc8c8aa7d (diff) | |
add apng preanims
Diffstat (limited to 'webAO/utils/calculateApngLength.js')
| -rw-r--r-- | webAO/utils/calculateApngLength.js | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/webAO/utils/calculateApngLength.js b/webAO/utils/calculateApngLength.js new file mode 100644 index 0000000..bc6b3fa --- /dev/null +++ b/webAO/utils/calculateApngLength.js @@ -0,0 +1,26 @@ + /** + * Adds up the chunk delays to find out how long a APNG is + * @param {data} apngFile the APNG data + */ +const calculateApngLength = (apngFile) => { + const d = new Uint8Array(apngFile); + // https://wiki.mozilla.org/APNG_Specification#.60fcTL.60:_The_Frame_Control_Chunk + let duration = 0; + for (var i = 0; i < d.length; i++) { + // Find fcTL header (66 63 54 4C) + if (d[i] === 0x66 + && d[i + 1] === 0x63 + && d[i + 2] === 0x54 + && d[i + 3] === 0x4C) { + console.log("found apng header"); + // numerator and denominator + let delay = ((d[i + 21] / d[i + 23]) * 1000) + + // minimum is 100ms + duration += delay < 100 ? 100 : delay; + } + } + console.debug(duration); + return duration * 10; +}; +export default calculateApngLength; |
