Convertir a avif con Python

힘센캥거루
2025년 1월 13일(수정됨)
52
python

Revisando el PageSpeed Insights del blog, noté que la carga de imágenes estaba tomando demasiado tiempo.

Fue el momento en que me di cuenta de que necesitaba una optimización de imágenes.

Originalmente usaba el formato webp, pero descubrí que avif tiene una mayor tasa de compresión, mejor compatibilidad y también admite animaciones.

Así que decidí compararlos.

Convertir a avif con Python-1

Cuando cambié el archivo png a avif, el tamaño se redujo a una décima parte.

Si fuera 2 o 3 veces no lo creería, pero 10 veces es demasiado.

Sentí que definitivamente tenía que cambiarlo.

Convertir a avif con Python-2

Con Python, es posible convertir png a avif o avif a png.

Primero, instala las librerías necesarias usando pip.

pip install pillow pillow_avif imageio

Mis imágenes están guardadas en rutas como posts/[slug]/*.png.

Por lo tanto, simplemente navega a esa ruta y convierte todos los archivos png a avif.

from PIL import Image
import pillow_avif
import imageio
import pathlib

path = pathlib.Path.cwd()
# Verifica todos los archivos en la ruta actual.
for folder in path.iterdir():
    if folder.is_dir():
        for file in folder.iterdir():
            # Si es una carpeta, verifica los archivos dentro de la carpeta.
            # Si el archivo es una imagen con extensiones como jpg, png, etc., ejecuta.
            if file.suffix in [".jpg", ".png", ".gif", ".PNG", ".JPG", ".jpeg", ".webp"]:
                img = Image.open(file)
                # Si es un archivo gif, es una animación.
                # Guarda cada imagen como un frame para convertirlo.
                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')
                # De lo contrario, simplemente cambia la extensión y guarda.
                else:
                    img.save(f'{file.parent}/{file.stem}.avif')

Después de la conversión, una animación de 5.5MB se redujo a 500kb.

La tasa de compresión es realmente impresionante.

Convertir a avif con Python-3

Consulta el blog oficial de Netflix para conocer más sobre el rendimiento de avif.

La extensión avif sigue siendo promovida por las empresas debido a la lógica del capital, por lo que probablemente continúe avanzando.

Aplícalo en tu blog y busca también la optimización SEO.

댓글을 불러오는 중...