APNG num_plays работает в Firefox, но не в Chrome
Спецификация файла APNG для справки: https://wiki.mozilla.org/APNG_Specification
num_plays определяет количество циклов анимации PNG. 0 - это специальное значение, которое означает, что анимация будет повторяться бесконечно.
Я нашел в сети некоторые APNG, которые я хочу отобразить на веб-странице. Все они имеют значение num_plays, равное 0. (В этом конкретном примере анимированное изображение Ивисаура из игры покемонов: https://cdn.bulbagarden.net/upload/c/c8/Spr_3e_002.png)
У меня не было проблем с отображением этого оригинального APNG в Chrome, где анимация проходила бесконечно.
Но для меня важно, чтобы анимация воспроизводилась только один раз, а после этого показывался финальный кадр. Я попробовал некоторые решения на основе HTML и JS, например, подождав пару секунд и заменив элемент APNG img на холст, к которому я его нарисовал, но я не смог получить желаемых результатов. Изображение будет сбрасываться на первый кадр в конце анимации вместо последнего кадра, или иногда смещение в пикселях содержимого изображения необъяснимым образом отличается.
Именно тогда я узнал, что могу изменить значение num_plays в разделе acTL APNG, чтобы изменить количество циклов, когда оно повторялось, до 1 - и я так и сделал.
Он отлично работает в Firefox! Вот пример, который показывает именно то поведение, которое я хочу:
https://www.dropbox.com/s/qg99bapowmye0a3/apng-issue-firefox-example.gif?raw=1
Но в Chrome APNG больше не анимируется вообще после изменения num_plays.
https://www.dropbox.com/s/ej79aroomt6eoip/apng-issue-chrome-example.gif?raw=1
Что может быть причиной того, что он не анимируется в Chrome? Ненулевое num_plays просто не поддерживается? Какие альтернативы у меня будут, чтобы получить такое же поведение, как в Firefox?
1 ответ
Проблема заключалась в том, что я изменил APNG, который я скачал из Интернета, который изначально имел num_plays 0, используя шестнадцатеричный редактор. Я забыл обновить CRC секции acTL, когда сделал это; Firefox сыграл неправильно сформированный APNG, как я и ожидал, но Chrome прервал работу, потому что мой APNG из-за отсутствия правильного CRC не соответствовал спецификации.