🐑

初めてAPNGを使った時のバグ対応

2022/03/11に公開

初めてAPNGを使用したときに起きたバグ?に対応した備忘録です。

APNGとは

Animated Portable Network Graphicsの略でアニメーションするPNG画像のこと。
Mozillaによって最初に導入されたファイル形式で、 PNG規格を拡張してアニメーション画像の対応を追加された。
アニメーションGIFと比べて、色数の制限や輪郭のジャギーなど品質面の制限が少ない。

APNGのサポート環境

2022/3月 現在

ほとんどのブラウザでサポートがされてきましたが、IEなどでは使用できません。

実際に起きた現象

APNGを使用してみるとSafariで問題が起きました。
サイトにアクセスした1回目は正常にアニメーションしますが、2回目以降やリロード時にアニメーションが発生しませんでした。
スーパーリロードすれば動いた時もありますが、一般ユーザにスーパーリロードをお願いするわけにもいかず改善方法を検討しました。

改善方法

画像にパラメータをつけて、リロードする度にAPNG画像を読み込み直すようにしました。

app.ts
    cache() {
        const randomNumber = Math.floor(Math.random() * 100);
        const pcApng = this.elms.cachePc.getAttribute('src');
        this.elms.cachePc.setAttribute('src', pcApng + '?' + randomNumber);
    }

他に試した改善策

apng-canvas.jsでAPNGを読み込む設定を書けばいけるかなと思いましたが、こちらでは解決できませんでした。

参考

https://caniuse.com/

https://ics.media/entry/2441/

Discussion