Introducción
WebP es un formato moderno para archivos de imagen, gratuito y de código abierto, desarrollado por Google para soportar compresión con y sin pérdida de calidad, con el objetivo de optimizar la visualización de imágenes en sitios web.
Las imágenes son responsables de la mayor parte de los datos transferidos en la mayoría de los sitios, lo que hace que el tamaño de los archivos de imágenes sea un factor crucial para una navegación rápida y fluida, especialmente en dispositivos móviles.
Las imágenes en formato WebP son significativamente más pequeñas en tamaño que las en formato JPG, incluso en niveles similares de compresión con pérdida, manteniendo la misma calidad visual. Además, a diferencia de JPG, WebP soporta transparencia (canal alfa), una característica que antes era exclusiva de formatos como PNG, pero con la ventaja de generar archivos considerablemente más pequeños.
Esta combinación de menor tamaño de archivo y mayor flexibilidad hace que WebP sea una excelente opción para mejorar el rendimiento y la calidad de los sitios web.
Instalando cwebp en Linux
El comando cwebp se utilizará para la conversión de imágenes. Para instalarlo, ejecute el comando apropiado según su distribución:
# bash
En Ubuntu/Debian: sudo apt install webp En Fedora: sudo dnf install webp En Arch Linux: sudo pacman -S webp En Slackware: sudo slackpkg install libwebp
Convirtiendo imágenes a WebP
El comando cwebp soporta la conversión de imágenes a partir de los formatos PNG, JPEG, TIFF y WebP. Vale la pena destacar que los archivos PNG y WebP animados no son soportados.
Convirtiendo una imagen JPG a WebP:
# bash
cwebp -q 80 nombre-de-la-imagen.jpg -o nombre-de-la-imagen.webp
Convirtiendo una imagen PNG a WebP:
# bash
cwebp -q 80 nombre-de-la-imagen.png -o nombre-de-la-imagen.webp
En los ejemplos anteriores:
- -q 80 Define la calidad de la imagen final en WebP, con valores de 0 a 100.
- -o Especifica el nombre del archivo WebP que se generará después de la conversión.
Ejemplo práctico
En este ejemplo, convertiremos dos imágenes: una en formato JPG llamada ilustracion-01.jpg y otra en formato PNG llamada ilustracion-02.png, al formato WebP. Listando los archivos originales:
# bash
ls -lh
total 716K
-rw-r--r-- 1 rudi users 381K Feb 6 09:53 ilustracion-01.jpg
-rw-r--r-- 1 rudi users 329K Feb 6 10:00 ilustracion-02.png
Utilizaremos una calidad de 60%, lo que proporcionará una excelente compresión, sin que la diferencia visual sea perceptible para muchas imágenes.
Convirtiendo la imagen ilustracion-01.jpg a WebP:
# bash
cwebp -q 60 ilustracion-01.jpg -o ilustracion-01.webp
Saving file 'ilustracion-01.webp'
File: ilustracion-01.jpg
Dimension: 1400 x 800
Output: 136206 bytes Y-U-V-All-PSNR 37.51 36.24 36.67 37.13 dB
(0.97 bpp)
block count: intra4: 3897 (88.57%)
intra16: 503 (11.43%)
skipped: 1 (0.02%)
bytes used: header: 313 (0.2%)
mode-partition: 17761 (13.0%)
Residuals bytes |segment 1|segment 2|segment 3|segment 4| total
macroblocks: | 8%| 30%| 41%| 21%| 4400
quantizer: | 45 | 38 | 32 | 21 |
filter level: | 14 | 8 | 41 | 38 |
Verificando el tamaño del archivo después de la conversión:
# bash
ls -lh ilustracion-01.*
-rw-r--r-- 1 rudi users 381K Feb 6 09:53 ilustracion-01.jpg
-rw-r--r-- 1 rudi users 134K Feb 6 10:28 ilustracion-01.webp
La compresión alcanzó aproximadamente 65%, manteniendo la calidad visual de la imagen, como se puede observar en la comparación entre las imágenes.
El proceso de conversión para imágenes PNG sigue el mismo principio. Ahora convertiremos la imagen ilustracion-02.png al formato WebP:
# bash
cwebp -q 60 ilustracion-02.png -o ilustracion-02.webp
Saving file 'ilustracion-02.webp'
File: ilustracion-02.png
Dimension: 500 x 500
Output: 19842 bytes Y-U-V-All-PSNR 39.00 39.90 39.83 39.27 dB
(0.63 bpp)
block count: intra4: 730 (71.29%)
intra16: 294 (28.71%)
skipped: 8 (0.78%)
bytes used: header: 157 (0.8%)
mode-partition: 3267 (16.5%)
Residuals bytes |segment 1|segment 2|segment 3|segment 4| total
macroblocks: | 4%| 22%| 30%| 44%| 1024
quantizer: | 45 | 41 | 34 | 26 |
filter level: | 14 | 9 | 21 | 28 |
Verificando el tamaño del archivo después de la conversión:
# bash
ls -lh ilustracion-02.*
-rw-r--r-- 1 rudi users 329K Feb 6 10:00 ilustracion-02.png
-rw-r--r-- 1 rudi users 20K Feb 6 10:56 ilustracion-02.webp
La compresión alcanzó increíbles 94%, manteniendo una excelente calidad visual. Recuerde, el porcentaje de compresión varía según la composición de la imagen. Las imágenes con menos colores, como dibujos o gráficos, tienden a comprimirse más sin perder mucha calidad.
Soporte
El formato WebP es soportado nativamente por los navegadores Google Chrome, Safari, Firefox, Edge y Opera. Además, muchas herramientas y bibliotecas, incluyendo software de edición de imágenes, ya ofrecen soporte para WebP. Sin embargo, aún pueden existir algunas limitaciones en ciertas plataformas o aplicaciones.
El paquete webp también incluye una herramienta para decodificación y visualización de imágenes WebP usando OpenGL. Para visualizar una imagen WebP desde la terminal, use el siguiente comando:
# bash
vwebp ilustracion-01.webp
Convirtiendo múltiples imágenes
Convertir una sola imagen usando la línea de comandos, como vimos en los ejemplos anteriores, es relativamente simple. Sin embargo, cuando se trata de cientos de imágenes, el proceso puede ser más lento. Para optimizar esto, puede crear un script que convierta varias imágenes a la vez.
Script para conversión masiva:
# bash
for file in *.{jpg,jpeg,png}; do cwebp -q 60 "$file" -o "${file%.*}.webp"; done
Ejecute el comando anterior dentro de la carpeta donde se encuentran las imágenes a convertir. Este script convertirá todas las imágenes con extensiones JPG, JPEG y PNG a WebP, manteniendo el nombre original de los archivos y solo cambiando la extensión a .webp. Los archivos originales se conservarán.
Explicación del comando:
- for file in *.{jpg,jpeg,png}:
- Itera sobre todos los archivos en el directorio actual con las extensiones .jpg, .jpeg y .png.
- cwebp -q 60 "$file":
- Convierte la imagen actual $file a WebP con calidad 60 (ajuste el valor -q según sea necesario).
- -o "${file%.*}.webp":
- Define el nombre del archivo de salida. ${file%.*} elimina la extensión del archivo original (por ejemplo, foto.jpg se convierte en foto), y .webp se agrega al final.
- done
- Finaliza el bucle.
Convirtiendo imágenes de un directorio específico
Si desea convertir imágenes de un directorio específico, simplemente reemplace carpeta con la ruta del directorio deseado:
# bash
for file in carpeta/*.{jpg,jpeg,png}; do cwebp -q 60 "$file" -o "${file%.*}.webp"; done
Eliminando las imágenes originales después de la conversión
Si desea eliminar las imágenes originales después de la conversión, agregue && rm "$file" al comando:
# bash
for file in *.{jpg,jpeg,png}; do cwebp -q 60 "$file" -o "${file%.*}.webp" && rm "$file"; done
Esto eliminará cada archivo original después de una conversión exitosa.
Conclusión
El formato WebP se destaca como una solución moderna y eficiente para la optimización de imágenes en la web, combinando alta calidad visual con tamaños de archivo significativamente más pequeños. Como hemos visto en este artículo, la conversión de imágenes a WebP se puede realizar de manera rápida y práctica utilizando herramientas de línea de comandos, como cwebp, disponible en la mayoría de las distribuciones de Linux.
Además de la conversión de imágenes, el comando ofrece una amplia gama de opciones avanzadas. Puede cambiar el modo de compresión, agregar transparencia en imágenes con fondo, redimensionar y recortar imágenes. Para explorar todas las posibilidades, consulte el manual completo ejecutando el comando man cwebp en la terminal.
Comandos simples y scripts automatizados le permiten convertir grandes cantidades de imágenes de formatos como JPG, PNG y TIFF a WebP, mejorando el rendimiento de sitios y aplicaciones, especialmente en dispositivos móviles y conexiones más lentas.
Si aún no ha probado WebP, ahora es el momento ideal para comenzar. Aproveche las técnicas presentadas aquí y vea cómo la adopción de este formato puede traer beneficios reales a sus proyectos.
Referencias
Para la elaboración de este artículo, una de las fuentes fue el manual (man page) disponible en Slackware Linux.
- https://developers.google.com/speed/webp
- https://www.geeksforgeeks.org/converting-images-to-webp-open-source-format-in-linux/
- https://blog.ironlinux.com.br/converter-imagens-png-para-webp-linux/
- https://web.dev/articles/codelab-serve-images-webp?hl=pt-br