在 PageSpeed Insights 检查博客时发现加载图片耗时较多。
意识到图片需要减肥的时刻到了。
原本使用 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。
댓글을 불러오는 중...