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 не соответствовал спецификации.

Другие вопросы по тегам