Inicio Apuntes FPApuntes DAMAcceso a DatosreDIMENSIONado: cómo redimensionar imágenes para la web desde el menú contextual de Ubuntu

reDIMENSIONado: cómo redimensionar imágenes para la web desde el menú contextual de Ubuntu

Publicado por
about redimensionado

Una vez más aquí. Hoy vendo a dejar un pequeño artículo para publicar una pequeña aplicación relacionada con lo que una amiga me comentó la semana pasada. El caso es que esta mujer se dedica a publicar en diferentes sitios web, lo cual hace que tenga que redimensionar imágenes cada poco tiempo. Ella utiliza Gimp para cambiar el tamaño de las imaǵenes, pero pensándolo un poco, una aplicación rápida para poder realizar estos cambios en imágenes desde el menú contextual del sistema operativo, es mucho más rápido y práctico. Y por este motivo estuve unos cuantos días escribiendo la siguiente aplicación llamada reDIMENSIONado.

Hoy en día, todo el mundo sabe que publicar fotos en un blog, una tienda online o redes sociales casi siempre implica el mismo problema: las imágenes salen de la cámara o del móvil con demasiados píxeles y demasiado peso. Subir un JPEG de 4000 px ralentiza la página, consume datos del visitante y empeora Core Web Vitals. Redimensionar a mano con GIMP o con la línea de comandos funciona, pero se vuelve tedioso cuando hay que preparar decenas de archivos. Por esta razón nació reDIMENSIONado.

Esta es una herramienta para Ubuntu / GNOME que resuelve ese flujo desde el gestor de archivos Nautilus (la app Archivos). Con un clic derecho sobre una o varias imágenes puedes generar copias listas para web: anchos típicos (640, 800, 1200, 1600, 1920), conversión a JPEG, PNG, WebP o AVIF, recortes tipo Instagram u Open Graph, control de calidad y, si lo necesitas, un límite de peso en kilobytes.

En las siguiente líneas vamos a ver exactamente para qué sirve, qué debes hacer para instalarlo y usarlo, y qué partes del código son las más importantes si quieres entenderlo o adaptarlo.

¿Para qué sirve reDIMENSIONado?

logo redimensionado

El objetivo no es sustituir un editor fotográfico avanzado, sino acortar el camino entre “tengo fotos en el escritorio” y “tengo versiones publicables. Encaja especialmente si:

  • Escribes en WordPress, Ghost, un CMS propio o páginas estáticas y quieres imágenes de 800–1600 px de ancho.
  • Preparas miniaturas (≈640 px), imágenes hero a Full HD (1920 px) o assets retina (1600 px).
  • Necesitas una imagen Open Graph de 1200×630 para compartir enlaces en redes.
  • Quieres un favicon cuadrado de 32×32 o un recorte 1:1 al estilo Instagram (1080 px).
  • Prefieres exportar a WebP (o AVIF) para reducir peso sin abrir otro programa.
  • Trabajas por lotes: seleccionas veinte fotos y las procesas de una vez, con barra de progreso y notificación al terminar.
  • Por defecto crea copias (por ejemplo foto_web1200.jpg) y no toca el original, salvo que elijas conscientemente sobrescribir. También puede quitar metadatos EXIF (-strip), útil por privacidad y un poco de peso extra.

Requisitos y entorno

reDIMENSIONado está pensado para Ubuntu (u otra distro Debian/Ubuntu) con escritorio GNOME y el gestor de archivos Nautilus. El paquete .deb declara dependencias que apt suele instalar solo:

  • ImageMagick (convert / magick): motor de redimensionado, recorte y conversión.
  • Zenity: diálogos gráficos (listas, formularios, progreso, confirmaciones).
  • Nautilus + python3-nautilus / python3-gi: menú contextual nativo.
  • libnotify-bin: notificaciones de escritorio.
  • Opcionalmente ayuda tener soporte HEIC (libheif) si trabajas con fotos de iPhone.

Instalación paso a paso

  1. Obtener el paquete
    Puedes clonar el repositorio y generar el .deb, o descargar el asset de la release en GitHub:
./build-deb.sh

sudo apt install ./dist/redimensionado_2.0.0_all.deb

nautilus -q

build-deb.sh empaqueta scripts, librería Bash, iconos, la extensión Python y los atajos del menú Scripts. Tras instalar, reinicia Nautilus (nautilus -q o cerrar y abrir Archivos) para que cargue la extensión y el submenú.

También puedes descargar ya el paquete .deb de la versión 2.0.0 que actualmente tengo en la versión de releases del repositorio.

  1. Comprobar que el menú aparece
    Abre Archivos, selecciona una o más imágenes (importante: no el fondo vacío de la carpeta) y haz clic derecho. Deberías ver:
  • reDIMENSIONado (menú nativo de la extensión), o
  • Scripts → reDIMENSIONado (scripts de Nautilus).

Ambas vías ofrecen presets rápidos e Interfaz completa.

  1. Desinstalación

La desinstalación es tan sencilla como abrir una terminal (Ctrl+Alt+T) y ejecutar en ella:

sudo apt remove redimensionado

Cómo usarlo en el día a día

Acciones rápidas (presets)

Sin abrir un formulario largo, el menú permite:

OpciónUso típico
Miniatura 640Cards, listados
Blog 800Entradas de texto
Web 1200Contenido general
Retina 1600Destacadas
Full HD 1920Cabeceras/hero
Instagram 1080Cuadrado 1:1
Open Graph1200×630 para redes /SEO social
Favicon 32Icono pequeño PNG

Las acciones rápidas respetan tus preferencias (~/.config/redimensionado/config): formato por defecto, calidad, si solo se reduce o también se amplía, carpeta de salida, etc.

Interfaz completa

preferencias reDIMENSIONado

Si eliges Interfaz completa…:

  1. Escoges un preset o un ancho personalizado.
  2. Ajustas formato (keep / jpg / png / webp / avif), calidad (60–95), modo de tamaño (exact vs shrink_only), recorte, copia o reemplazo, sufijo (_web{W}), carpeta de salida y máximo KB.
  3. Si marcas reemplazo, el programa pide confirmación.
  4. Al terminar ves un resumen, una notificación y, según configuración, la opción de abrir la carpeta del resultado.

Consejo práctico: para web suele bastar 1200 px, calidad 85 y, si el hosting lo permite, salida WebP. Usa shrink_only si no quieres ampliar fotos pequeñas (ampliar inventa píxeles y puede verse borroso).

Preferencias persistentes

Desde el menú → Preferencias… o editando:

~/.config/redimensionado/config

Puedes fijar valores por defecto para no repetir opciones cada vez. Los errores de procesamiento se registran en:

~/.local/state/redimensionado/errores.log

Arquitectura del proyecto (visión general)

El diseño separa interfaz, lógica y integración con Nautilus:

ComponenteRol
lib/redimensionado-common.shNúcleo: config, ImageMagick, progreso, logs
scripts/reDIMENSIONadoGUI completa con Zenity
scripts/reDIMENSIONado-rapido.shPresets sin diálogo largo
scripts/reDIMENSIONado-preferenciasEditor de config
nautilus-extension/redimensionado.pyMenú contextual nativo
nautilus-scripts/reDIMENSIONado/Entradas bajo Scripts
build-deb.shEmpaquetado Debian
tests/test_redimensionado.shPruebas automáticas

Esta separación permite reutilizar la misma lógica desde el menú Python, desde Scripts o desde tests en terminal.

Partes más importantes del código

La librería común (redimensionado-common.sh)

Es el corazón del programa. Define variables (RD_WIDTH, RD_FORMAT, RD_QUALITY, RD_CROP…), carga la config del usuario y expone funciones como rd_process_files y rd_process_one.

La detección de ImageMagick es deliberadamente compatible con Ubuntu:

rd_init_imagemagick() {
  if command -v convert >/dev/null 2>&1; then
    RD_IM=(convert)
  elif command -v magick >/dev/null 2>&1; then
    RD_IM=(magick)
  else
    return 1
  fi
}

Construcción de la geometría: rd_build_ops

Aquí se traduce la intención del usuario a argumentos de ImageMagick. Tres ideas clave:

  • -auto-orient: respeta la orientación EXIF de fotos de móvil.
  • exact vs shrink_only: -resize WIDTHx fuerza el ancho (puede ampliar); -resize WIDTHx> solo reduce.
  • Recortes: patrón “cubrir + recortar centrado” con ^ y -extent (1:1, 16:9, 4:3, Open Graph 1200×630).

También aplica -strip y -quality según preferencias. Ese bloque es el que más conviene tocar si quieres nuevos ratios o presets.

Procesado de un archivo: rd_process_one

Para cada fichero la librería:

  1. Comprueba que sea una imagen admitida (incluye HEIC, SVG, PDF…).
  2. En PDF usa la primera página (archivo.pdf[0]).
  3. Decide la extensión de salida (rd_out_extension).
  4. Resuelve carpeta destino y sufijo (_web{W} → _web1200).
  5. Evita sobrescrituras accidentales con nombres únicos (foto_web1200_2.jpg).
  6. Ejecuta ImageMagick sobre un temporal y mueve el resultado.
  7. Si hay max_kb, baja calidad en bucle hasta cumplir el límite.

Ese flujo es lo que hace segura la herramienta para uso diario: copias por defecto, renombrado inteligente y log de fallos.

Lotes y progreso: rd_process_files

Con varias imágenes muestra una barra Zenity. El detalle técnico importante es usar process substitution (exec 3> >(zenity –progress …)) para que el bucle no corra en un subshell y no se pierdan los contadores RD_OK / RD_FAIL. Es un patrón clásico de Bash que evita bugs difíciles de ver.

La interfaz Zenity (scripts/reDIMENSIONado)

El script de interfaz completa hace source de la librería (instalada en /usr/share/redimensionado/lib/ o desde el repo en desarrollo), lee NAUTILUS_SCRIPT_SELECTED_FILE_PATHS y encadena:

  1. zenity –list (presets).
  2. zenity –forms (formato, calidad, recorte, salida…).
  3. Confirmación si hay reemplazo.
  4. rd_process_files + rd_show_summary.

Zenity aporta UX sin escribir una app GTK completa; la extensión Python solo lanza estos scripts.

Extensión Nautilus en Python

nautilus-extension/redimensionado.py implementa Nautilus.MenuProvider. Filtra ficheros por extensión, construye un submenú y, al activar una opción, lanza el binario correspondiente con la variable de entorno que esperan los scripts Bash:

env["NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"] = "\n".join(paths) + "\n"
subprocess.Popen(cmd, env=env, start_new_session=True)

Así el menú nativo y el menú Scripts comparten exactamente el mismo motor. get_file_items solo actúa cuando hay selección; en el fondo vacío no muestra entradas (comportamiento habitual de Nautilus).

Empaquetado .deb

build-deb.sh genera un paquete Architecture: all con script canónico en /usr/share/redimensionado/, extensión en /usr/share/nautilus-python/extensions/ e iconos hicolor. El postinst copia el submenú Scripts a ~/.local/share/nautilus/scripts/reDIMENSIONado de cada usuario, porque Nautilus solo ejecuta scripts desde esa ruta de usuario, no desde /usr/share/nautilus/scripts/. Ese detalle es crítico: sin el enlace/copia en el home, el menú Scripts no aparecería aunque el .deb estuviera instalado.

Buenas prácticas al publicar imágenes en la web

  • Elige el ancho del contenedor, no “el máximo posible”. Una columna de blog de 720 px no necesita 1920.
  • Prefiere WebP (o AVIF) cuando el sitio lo soporte; mantén JPEG como fallback si hace falta.
  • Calidad 80–85 suele ser el punto dulce entre nitidez y peso.
  • Quita EXIF en fotos personales antes de subirlas.
  • No amplíes sin necesidad: parte siempre de un original más grande que el destino.
  • Para SEO social, genera una variante 1200×630 dedicada (preset Open Graph).

Conclusión

reDIMENSIONado convierte una tarea repetitiva en un gesto del menú contextual. Sirve a bloggers, desarrolladores front-end y cualquiera que publique contenido visual sin querer abrir un editor pesado cada vez. Su valor técnico está en combinar ImageMagick (procesado), Zenity (diálogos), scripts de Nautilus y una extensión Python, con una librería Bash central que concentra la lógica de negocio: geometría, formatos, copias seguras, límites de peso y preferencias.

Si solo te quedas con tres ideas: instala el .deb y reinicia Nautilus; selecciona imágenes y usa el menú reDIMENSIONado; y, si quieres personalizar el comportamiento, empieza por lib/redimensionado-common.sh (rd_build_ops y rd_process_one) y por el fichero de configuración en ~/.config/redimensionado/config.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

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

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.