LinuxParty
Este script utiliza ImageMagick y jpegoptim para convertir imágenes a JPEG, reducir su tamaño, corregir su orientación y prepararlas para publicarlas en una página web
El formato WebP permite almacenar imágenes con una buena relación entre calidad y tamaño, por lo que se ha convertido en una opción habitual en páginas web, gestores de contenidos y servicios de imágenes.
Sin embargo, todavía encontramos aplicaciones, editores y procedimientos de trabajo que funcionan mejor con archivos JPG. También puede ocurrir que descarguemos una imagen WebP y necesitemos convertirla antes de editarla, enviarla o incorporarla a un proyecto.
Podemos realizar la conversión manualmente mediante ImageMagick, pero cuando hacemos este trabajo con frecuencia resulta mucho más cómodo disponer de un script que automatice todo el proceso.
El script convierteimagen.sh convierte imágenes WebP, PNG, JPEG, GIF y otros formatos compatibles con ImageMagick a JPG. De forma predeterminada, limita su anchura a 1.200 píxeles y optimiza el resultado mediante jpegoptim.
Qué hace el script
El funcionamiento predeterminado es sencillo. Si le entregamos un archivo llamado:
fotografia.webp
El script generará:
fotografia-cvd.jpg
(-cvd, es nuestra firma, pon tu la tuya)
El archivo original no se modifica ni se elimina.
Durante el proceso, el script realiza diferentes operaciones:
- Comprueba que la imagen de entrada existe.
- Detecta si el sistema utiliza
magicko el antiguo comandoconvert. - Corrige automáticamente la orientación indicada por los datos EXIF.
- Sustituye las transparencias por un fondo blanco.
- Mantiene la proporción original de la imagen.
- Reduce la anchura a un máximo de 1.200 píxeles.
- Evita ampliar imágenes que ya sean más pequeñas.
- Convierte el resultado al formato JPEG.
- Optimiza el archivo mediante
jpegoptim. - Elimina metadatos innecesarios.
- Admite nombres de archivos que contienen espacios.
- Puede procesar varias imágenes en una sola ejecución.
- No sobrescribe archivos existentes sin autorización.
También permite elegir otra anchura, modificar la calidad del JPEG o realizar la conversión sin cambiar las dimensiones.
Instalar las dependencias
El script necesita dos herramientas: ImageMagick y jpegoptim.
ImageMagick se encarga de leer, transformar y convertir las imágenes. jpegoptim realiza la optimización final del archivo JPEG.
En Fedora podemos instalarlas con:
sudo dnf install ImageMagick jpegoptim
En Debian, Ubuntu, Linux Mint y distribuciones derivadas utilizaremos:
sudo apt update sudo apt install imagemagick jpegoptim
Para comprobar que ambas herramientas están disponibles podemos ejecutar:
magick -version jpegoptim --version
En sistemas que todavía utilicen ImageMagick 6, es posible que el primer comando se llame convert:
convert -version
El script detecta automáticamente cuál de los dos está disponible.
Crear el script
Podemos guardar el programa en /usr/local/bin, una ubicación apropiada para scripts instalados localmente y disponibles para todos los usuarios del equipo.
Abrimos el archivo con nuestro editor:
sudo nano /usr/local/bin/convierteimagen.sh
Pegamos el siguiente contenido:
#!/usr/bin/env bash # Convierte imágenes a JPG y las optimiza para su publicación web. # Salida predeterminada: nombre-original-cvd.jpg set -o pipefail PROGRAMA="${0##*/}" ANCHO=1200 CALIDAD=96 NO_RESIZE=0 SOBRESCRIBIR=0 # Colores if [[ -t 1 ]]; then AMARILLO='\033[33m' CIAN='\033[36m' ROJO='\033[31m' VERDE='\033[32m' NC='\033[0m' else AMARILLO='' CIAN='' ROJO='' VERDE='' NC='' fi mostrar_ayuda() { cat <<EOF Uso: $PROGRAMA [OPCIONES] imagen [imagen2...] Convierte una o varias imágenes a formato JPG, limita su anchura y optimiza el resultado con jpegoptim. El archivo generado tendrá este formato: nombre-original-cvd.jpg Opciones: -nr, -n, --noresize, --no-resize No cambia las dimensiones de la imagen. -w, --width PÍXELES Establece la anchura máxima. Valor predeterminado: 1200 píxeles. -q, --quality NÚMERO Calidad JPEG entre 1 y 100. Valor predeterminado: 96. -f, --force Sobrescribe el archivo de salida si ya existe. -h, --help Muestra esta ayuda. Ejemplos: $PROGRAMA imagen.webp $PROGRAMA --no-resize imagen.webp $PROGRAMA -nr imagen.webp $PROGRAMA --width 1600 --quality 90 imagen.png $PROGRAMA --force "imagen con espacios.webp" $PROGRAMA *.webp Comportamiento: - Convierte WebP, PNG, JPEG, GIF y otros formatos admitidos por ImageMagick. - Mantiene la proporción original. - No amplía imágenes cuya anchura ya sea menor que el límite indicado. - Sustituye las transparencias por un fondo blanco. - Corrige la orientación indicada por los datos EXIF. - Elimina metadatos durante la optimización. - No borra ni modifica el archivo original. Dependencias: ImageMagick y jpegoptim. Instalación de dependencias: Fedora: sudo dnf install ImageMagick jpegoptim Debian y Ubuntu: sudo apt install imagemagick jpegoptim EOF } error() { printf '%bError: %s%b\n' "$ROJO" "$*" "$NC" >&2 } comprobar_entero() { [[ "$1" =~ ^[0-9]+$ ]] } # Procesamiento de opciones while [[ $# -gt 0 ]]; do case "$1" in -h|--help) mostrar_ayuda exit 0 ;; -nr|-n|--noresize|--no-resize) NO_RESIZE=1 shift ;; -w|--width) if [[ $# -lt 2 ]]; then error "falta el número de píxeles para $1." exit 2 fi ANCHO="$2" if ! comprobar_entero "$ANCHO" || (( ANCHO < 1 )); then error "la anchura debe ser un número entero positivo." exit 2 fi shift 2 ;; -q|--quality) if [[ $# -lt 2 ]]; then error "falta el valor de calidad para $1." exit 2 fi CALIDAD="$2" if ! comprobar_entero "$CALIDAD" || (( CALIDAD < 1 || CALIDAD > 100 )); then error "la calidad debe estar comprendida entre 1 y 100." exit 2 fi shift 2 ;; -f|--force) SOBRESCRIBIR=1 shift ;; --) shift break ;; -*) error "opción desconocida: $1" printf 'Utiliza "%s --help" para consultar la ayuda.\n' "$PROGRAMA" >&2 exit 2 ;; *) break ;; esac done if [[ $# -eq 0 ]]; then mostrar_ayuda exit 1 fi # ImageMagick 7 utiliza "magick"; las versiones anteriores, "convert". if command -v magick >/dev/null 2>&1; then IMAGEMAGICK=(magick) elif command -v convert >/dev/null 2>&1; then IMAGEMAGICK=(convert) else error "no se encuentra ImageMagick." printf 'Instálalo con "sudo dnf install ImageMagick" o ' printf '"sudo apt install imagemagick".\n' exit 3 fi if ! command -v jpegoptim >/dev/null 2>&1; then error "no se encuentra jpegoptim." printf 'Instálalo con "sudo dnf install jpegoptim" o ' printf '"sudo apt install jpegoptim".\n' exit 3 fi PROCESADAS=0 ERRORES=0 for ENTRADA in "$@"; do if [[ ! -f "$ENTRADA" ]]; then error "no existe o no es un archivo: $ENTRADA" ((ERRORES++)) continue fi DIRECTORIO=$(dirname -- "$ENTRADA") ARCHIVO=$(basename -- "$ENTRADA") NOMBRE="${ARCHIVO%.*}" SALIDA="${DIRECTORIO}/${NOMBRE}-cvd.jpg" if [[ "$ENTRADA" == "$SALIDA" ]]; then error "el archivo de entrada y el de salida son el mismo." ((ERRORES++)) continue fi if [[ -e "$SALIDA" && "$SOBRESCRIBIR" -ne 1 ]]; then error "ya existe: $SALIDA" printf 'Utiliza --force para sobrescribirlo.\n' >&2 ((ERRORES++)) continue fi printf '%b\n' "$AMARILLO" echo "---------------------------" echo "Entrada" echo "---------------------------" ls --color=auto -lshF -- "$ENTRADA" echo "---------------------------" printf '%b' "$NC" echo "Convirtiendo:" echo " Origen: $ENTRADA" echo " Destino: $SALIDA" OPCIONES=( "$ENTRADA" -auto-orient -background white -alpha remove -alpha off ) if [[ "$NO_RESIZE" -eq 0 ]]; then # El símbolo > evita ampliar imágenes más pequeñas. OPCIONES+=(-resize "${ANCHO}x>") fi OPCIONES+=(-quality "$CALIDAD" "$SALIDA") if ! "${IMAGEMAGICK[@]}" "${OPCIONES[@]}"; then error "ImageMagick no pudo convertir: $ENTRADA" ((ERRORES++)) continue fi if ! jpegoptim \ --max="$CALIDAD" \ --strip-all \ --preserve \ --quiet \ "$SALIDA"; then error "jpegoptim no pudo optimizar: $SALIDA" ((ERRORES++)) continue fi printf '%b\n' "$CIAN" echo "---------------------------" echo "Salida" echo "---------------------------" ls --color=auto -lshF -- "$SALIDA" echo "---------------------------" printf '%b' "$NC" printf '%bConversión terminada correctamente.%b\n' "$VERDE" "$NC" ((PROCESADAS++)) done echo echo "Resumen: $PROCESADAS imagen(es) convertida(s), $ERRORES error(es)." if (( ERRORES > 0 )); then exit 1 fi exit 0
Guardamos el archivo y asignamos permiso de ejecución:
sudo chmod 755 /usr/local/bin/convierteimagen.sh
Como /usr/local/bin suele formar parte de la variable PATH, podremos ejecutar el script desde cualquier directorio escribiendo simplemente:
convierteimagen.sh
Si el sistema no encuentra el comando, podemos comprobar la variable con:
echo "$PATH"
También podemos ejecutarlo indicando la ruta completa:
/usr/local/bin/convierteimagen.sh --help
Consultar la ayuda
Para ver las opciones disponibles utilizaremos:
convierteimagen.sh --help
También está disponible la forma abreviada:
convierteimagen.sh -h
La ayuda explica la sintaxis, las opciones, las dependencias y varios ejemplos de utilización.
Convertir una imagen WebP a JPG
Para realizar una conversión normal ejecutamos:
convierteimagen.sh paisaje.webp
El resultado será:
paisaje-cvd.jpg
Si la imagen tiene más de 1.200 píxeles de anchura, se reducirá manteniendo sus proporciones. Si ya es más pequeña, conservará sus dimensiones originales.
El símbolo > utilizado internamente en la expresión de ImageMagick:
1200x>
indica que solamente deben reducirse las imágenes que superen el límite. Esto evita ampliar innecesariamente archivos pequeños y perder calidad.
Convertir sin modificar las dimensiones
Cuando queremos cambiar el formato, pero conservar exactamente el tamaño de la imagen, usamos:
convierteimagen.sh --no-resize imagen.webp
También podemos emplear cualquiera de estas formas abreviadas:
convierteimagen.sh -nr imagen.webp
convierteimagen.sh -n imagen.webp
En este caso se mantiene la resolución original, aunque se siguen aplicando la orientación automática, el fondo blanco, la conversión a JPEG y la optimización.
Elegir otra anchura máxima
La opción --width permite establecer un límite diferente.
Para generar una imagen con una anchura máxima de 1.600 píxeles:
convierteimagen.sh --width 1600 fotografia.webp
La forma abreviada es:
convierteimagen.sh -w 1600 fotografia.webp
Podemos utilizar esta posibilidad para preparar imágenes destinadas a diferentes partes de una página web.
Por ejemplo, una miniatura podría limitarse a 400 píxeles:
convierteimagen.sh --width 400 miniatura.png
Una fotografía grande para un artículo podría limitarse a 1.600:
convierteimagen.sh --width 1600 portada.webp
Cambiar la calidad del JPEG
El valor predeterminado de calidad es 96. Produce una imagen de alta calidad, aunque el archivo puede seguir siendo relativamente grande.
Podemos reducirlo para conseguir archivos más ligeros:
convierteimagen.sh --quality 85 imagen.webp
La forma abreviada es:
convierteimagen.sh -q 85 imagen.webp
La calidad debe expresarse mediante un número comprendido entre 1 y 100.
Para páginas web, un valor situado entre 82 y 90 suele proporcionar un equilibrio razonable entre calidad y tamaño. En fotografías con muchos detalles puede ser conveniente utilizar un valor algo mayor.
También podemos combinar anchura y calidad:
convierteimagen.sh --width 1400 --quality 88 imagen.webp
Procesar varias imágenes
El script admite varios archivos en la misma ejecución:
convierteimagen.sh foto1.webp foto2.png foto3.jpeg
También podemos utilizar los comodines del intérprete de comandos.
Para convertir todos los archivos WebP del directorio actual:
convierteimagen.sh *.webp
Para convertir archivos WebP y PNG:
convierteimagen.sh *.webp *.png
Cada imagen genera su propio archivo terminado en -cvd.jpg.
Si tenemos:
cabecera.webp captura.png servidor.jpeg
Obtendremos:
cabecera-cvd.jpg captura-cvd.jpg servidor-cvd.jpg
Trabajar con nombres que contienen espacios
Las variables del script están correctamente entrecomilladas, por lo que admite nombres con espacios.
Debemos escribir el nombre entre comillas:
convierteimagen.sh "captura de pantalla.webp"
La salida será:
captura de pantalla-cvd.jpg
También podemos combinar varios archivos:
convierteimagen.sh "foto del viaje.webp" "captura del escritorio.png"
Sobrescribir un resultado existente
Por seguridad, el script no reemplaza una imagen generada anteriormente.
Si ejecutamos:
convierteimagen.sh imagen.webp
y ya existe:
imagen-cvd.jpg
el programa mostrará un error y conservará el archivo existente.
Si realmente queremos sustituirlo, utilizaremos:
convierteimagen.sh --force imagen.webp
O su forma abreviada:
convierteimagen.sh -f imagen.webp
Esta protección evita perder accidentalmente una imagen que hayamos editado después de la primera conversión.
Qué ocurre con las transparencias
JPEG no admite transparencia. Si convertimos directamente un PNG o WebP transparente, las zonas vacías pueden aparecer negras dependiendo de la configuración y del programa utilizado.
El script soluciona este problema mediante estas opciones:
-background white -alpha remove -alpha off
Las áreas transparentes se sustituyen por un fondo blanco antes de generar el JPEG.
Esta decisión es apropiada para la mayoría de fotografías, capturas y contenidos web. Sin embargo, si necesitamos conservar la transparencia debemos mantener el archivo en PNG o WebP, ya que JPEG no puede almacenarla.
Corrección de la orientación
Algunas fotografías tomadas con teléfonos o cámaras no están guardadas físicamente en la orientación en la que se muestran. El dispositivo añade una etiqueta EXIF que indica si deben girarse.
El script utiliza:
-auto-orient
Esta opción aplica la orientación correcta antes de eliminar los metadatos. Así evitamos que la imagen aparezca girada después de la optimización.
Por qué se eliminan los metadatos
Las imágenes pueden contener información EXIF, perfiles, comentarios, datos de la cámara e incluso coordenadas geográficas.
jpegoptim recibe la opción:
--strip-all
Con ella elimina metadatos que no son necesarios para mostrar la imagen en una página web.
Esto puede reducir ligeramente el tamaño del archivo y evita publicar información privada, como la ubicación donde se tomó una fotografía.
Debemos tener en cuenta que esta eliminación es intencionada. Si necesitamos conservar los metadatos originales, tendremos que modificar el comando de optimización.
Diferencias entre magick y convert
ImageMagick 6 utiliza habitualmente el comando:
convert
ImageMagick 7 recomienda utilizar:
magick
El script comprueba primero si existe magick. Si no lo encuentra, busca convert.
Gracias a esta detección puede funcionar en distribuciones con diferentes versiones de ImageMagick sin que tengamos que editar el código.
Posibles errores
Si aparece este mensaje:
Error: no se encuentra ImageMagick.
debemos instalar el paquete correspondiente.
En Fedora:
sudo dnf install ImageMagick
En Debian o Ubuntu:
sudo apt install imagemagick
Si el programa indica que no encuentra jpegoptim, lo instalaremos con:
sudo dnf install jpegoptim
o:
sudo apt install jpegoptim
También podemos comprobar que el script tiene permiso de ejecución:
ls -l /usr/local/bin/convierteimagen.sh
Los permisos deberían mostrar al menos las marcas de ejecución correspondientes:
-rwxr-xr-x
Si no aparecen, ejecutaremos:
sudo chmod 755 /usr/local/bin/convierteimagen.sh
Un pequeño script para una tarea repetitiva
La principal utilidad de este programa no está en hacer algo imposible mediante comandos individuales. Su ventaja consiste en reunir en una sola orden todas las operaciones que solemos repetir al preparar una imagen para Internet.
En lugar de recordar varias opciones de ImageMagick, optimizar posteriormente el JPEG y comprobar manualmente los archivos, podemos ejecutar:
convierteimagen.sh imagen.webp
El resultado queda convertido, orientado, redimensionado y optimizado, mientras que la imagen original permanece intacta.
También podemos adaptar el proceso según cada caso mediante las opciones de anchura, calidad, ausencia de redimensionado y sobrescritura.
Es un buen ejemplo de cómo un script Bash relativamente pequeño puede ahorrar tiempo, evitar errores y convertir una tarea repetitiva en una herramienta reutilizable para cualquier sistema Linux.
Metadescripción
Aprende a convertir imágenes WebP y PNG a JPG en Linux mediante un script Bash con ImageMagick y jpegoptim, redimensionado y optimización automática.
Palabras clave
convertir WebP a JPG Linux, convertir PNG a JPG, script Bash imágenes, ImageMagick, jpegoptim, optimizar imágenes Linux, reducir imágenes, convertir imágenes terminal, magick, convert
Texto para redes sociales
Convierte imágenes WebP y PNG a JPG desde Linux con un único comando. Este script Bash redimensiona, corrige la orientación, elimina metadatos y optimiza las imágenes para su publicación web.
-
Gráficos
- Cómo convertir imágenes WebP y PNG a JPG en Linux con un script Bash
- ¡Photoshop en Linux! Parches permiten instalar y ejecutar versiones recientes con Wine
- Grandes Edificios y Rascacielos Abandonados.
- El controlador de gráficos NVIDIA 575 para Linux entra en la versión beta pública con NVIDIA Smooth Motion
- Gracias a Nvidia, llegará una nueva generación de PC que ejecutarán Linux
- Inkscape 1.4, editor SVG de código abierto con galería de filtros y cuadrículas modulares
- El editor SVG de código abierto Inkscape 1.3 ya está disponible con la nueva herramienta Shape Builder, muchos cambios
- Mesa 23.2 trae compatibilidad con OpenGL 3.1 y OpenGL ES 3.0 en Asahi, nuevas características de RADV
- Optimizar, cambiar tamaño y peso de las imágenes desde la consola terminal Linux
- Peek, para grabar la pantalla y hacer vídeos en formato GIF
- Como pausar ffmpeg incluso cuando está en proceso de codificación
- Hackers han roto la red de NVIDIA y tras amenazas filtran el Código Fuente de DLSS en Internet



