Convertir archivos JPG a WebP con Python

Ahora les quiero compartir un pequeño programa en Python para convertir archivos JPG a WebP.

Primero que nada les ofrezco una disculpa a mis 4 lectores, con la depresión de la pandemia no dan muchas ganas de escribir, pero esto ya está durando mucho y no se puede estar tanto tiempo preocupado, lo que sigue es un proceso de adaptación a la nueva realidad y ni modo ¡A darle átomos!

Decidí dejar de estar ocioso y aprender una nueva habilidad. Desde hace tiempo me ha estado haciendo ojitos Pelican un generador de sitios web que utiliza Python (¡Obvio!).

Migrar este blog sería algo en exceso complicado (aunque no lo descarto), por eso decidí hacer pruebas con algo más pequeño, mi otro blog Centauro del Norte.

Las ventajas son muchas, el sitio generado no requiere una base de datos, tienes un mayor control de todos los aspectos del sitio, carga mucho más rápido, aunque eso si, requiere de más conocimientos técnicos.

WebP el formato gráfico de Google

Durante la migración quise probar algo nuevo, cambiar todos los archivos de JPG a WebP. En general son archivos más pequeños, aunque he tenido resultados mixtos en este punto. Dicen que tienen una carga más rápida y aparentemente es cierto. Lo he probado en Chrome y con Firefox y las imágenes aparece como de rayo.

Sin embargo, convertir las imágenes no era algo sencillo. WordPress guarda todas las imágenes en una carpeta que se llama uploads y para conservar algo de orden almacena los archivos en subcarpetas de año y mes.

Probablemente hay otras formas de abordar este problema pero a mi se me ocurrió hacer un programa en Python inspirado en programas que ya había hecho para otros fines.

Lo primero es establecer un directorio de trabajo, luego hacer un barrido a esa carpeta y sus subcarpetas.

Si encuentra un archivo JPG inicia una conversión y genera un archivo del mismo nombre pero con extensión WebP.

Veamos el código.

import os
from PIL import Image

carpeta_raiz = "/carpeta/de/trabajo/"

# Localizar los archivos jpg
for root, dirs, files in os.walk(carpeta_raiz):
    for file in files:
        if file.endswith(".jpg"):
            archivo = os.path.join(root, file)
            archivo_nuevo = archivo.replace('.jpg', '.webp')

            # Convertirlos a WebP
            im = Image.open(archivo).convert("RGB")
            im.save(archivo_nuevo,"webp")

            print(archivo_nuevo)        

print("¡Trabajo terminado!")

Como pueden ver es un código muy sencillo, se puede adaptar para otro tipo de conversiones sin problemas.

Una vez que tuve los archivos WebP, lo único que tuve que hacer es una búsqueda y reemplazo en los archivos markdown que sirven para generar los artículos del sitio.

Ejemplos los pueden ver en: Ex Hacienda La Loma, cuna de la División del Norte y en Mercado Municipal General Francisco Villa. Ambos artículos contienen una buena cantidad de imágenes en formato WebP y creo que tienen un tiempo de carga mucho más que razonable. Bueno, eso digo yo, porque después de la primer carga entran en el juego los cachés de los navegadores.

Espero que les sea de utilidad y procuraré escribir más seguido, que también a mi me hace falta.

2 comentarios en «Convertir archivos JPG a WebP con Python»

  1. Así es mi estimada Oli,

    WordPress no permite subir o utilizar archivos en formato WebP. Se puede hacer algo con algunas modificaciones pero es mucho trabajo.

    Esto no pasa con un generador de contenido estático como Pelican que es el que uso en Centauro del Norte, hay mucha más flexibilidad, pero debes de tener un conocimiento técnico más avanzado, digo, si quieres hacer este tipo de ajustes.

    Lo que puedes hacer es, descargar el archivo WebP y convetirlo a JPG.

    Saludirijillos 🙂

    Responder
  2. Así es mi querido LinuxManR4, hay que adaptarse, no hay lugar para nada más.
    Y mientras más tengamos la mente ocupada mejor.

    Me pasa con el WordPress que algunas imágenes que encuentro en la red son formato WebP y no me las quiere leer, o las lee pero se tarda los mil horrores en refrescar, termina marcándome un error, pero no sé, será alguna restricción del WordPress gratuito o algo.

    Muy interesante tu artículo.

    Un abrazo!!!

    Responder

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.