ページスピードインサイトでブログをチェックしたところ、画像のロードに時間がかかっていることがわかりました。
画像のダイエットが必要だと気づいた瞬間でした。
もともとはwebp形式を使用していましたが、avifが圧縮率が高く互換性が良く、さらにアニメーションもサポートしていることを知りました。
そこで一度比較してみました。

pngファイルをavifに変換したところ、サイズが10倍に縮小されました。
2〜3倍ならわかりますが、10倍は非常に大きいです。
絶対に変えるべきだと思いました。

pythonを使えばpngをavifに変換したり、avifをpngに変換することが可能です。
まずpipを使って必要なライブラリをインストールします。
pip install pillow pillow_avif imageio
まず、自分の画像はposts/[slug]/*.pngのようなパスに保存されています。
したがって、そのパスに移動してpngファイルをすべてavifに変換すればよいです。
from PIL import Image
import pillow_avif
import imageio
import pathlib
path = pathlib.Path.cwd()
# 現在のパスにあるファイルをすべて確認します。
for folder in path.iterdir():
if folder.is_dir():
for file in folder.iterdir():
# フォルダであれば、フォルダ内のファイルを確認します。
# 拡張子がjpg、pngなどの画像ファイルである場合に実行します。
if file.suffix in [".jpg", ".png", ".gif", ".PNG", ".JPG", ".jpeg", ".webp"]:
img = Image.open(file)
# gifファイルなら必ずアニメーションです。
# 各画像をフレームとして保存し変換します。
if file.suffix == ".gif" :
frames = []
frame_count = 0
try:
while True:
current_frame = img.convert('RGB')
frames.append(current_frame)
img.seek(img.tell() + 1)
except EOFError:
pass
imageio.mimsave(f'{file.parent}/{file.stem}.avif', frames, format='AVIF')
# それ以外の場合は単に拡張子を変換して保存します。
else:
img.save(f'{file.parent}/{file.stem}.avif')
このように変換したところ、5.5MBのアニメーションが500kbになりました。
本当に圧縮率がすごいです。

avifの性能についてはNetflixの公式ブログを確認しましょう。
avifの拡張子は経済の論理に従って企業がプッシュしているので、これからも発展していくと思われます。
ブログに適用してSEO最適化も狙ってみましょう。
댓글을 불러오는 중...