aboutsummaryrefslogtreecommitdiff
path: root/webAO/utils/calculateApngLength.js
diff options
context:
space:
mode:
authorstonedDiscord <Tukz@gmx.de>2022-03-11 18:15:55 +0100
committerstonedDiscord <Tukz@gmx.de>2022-03-11 18:15:55 +0100
commit52b79f4b5ffce7679fa5fcceeb80d615ad0cdf16 (patch)
treeaffeaf0853a067abe7590dac077c4f1c40f82945 /webAO/utils/calculateApngLength.js
parent7c5fac67edf4e265176d57b714bd21cdc8c8aa7d (diff)
add apng preanims
Diffstat (limited to 'webAO/utils/calculateApngLength.js')
-rw-r--r--webAO/utils/calculateApngLength.js26
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;