Girar imágenes desde la terminal

21

Tengo un directorio con muchas imágenes, pero tienen una orientación incorrecta. Quiero rotar las imágenes para corregir la orientación (principalmente ± 90 o ). Usando el visor de imágenes (foto de shotwell) puedo rotarlas individualmente haciendo clic en el botón de rotación, pero eso es demasiado tedioso.

Miré man shotwell y shotwell --help-all pero no hay nada que explique cómo invocar el comando de rotación desde la línea de comandos.

¿Hay alguna manera de invocar el comando de rotación de Shotwell (o cualquier otro visor) desde la terminal? O cualquier otro método para rotar imágenes también es bienvenido.

    
pregunta Prakash Gautam 02.03.2015 - 08:20

5 respuestas

22

Si está buscando una implementación de bash pura, el comando convert de ImageMagick es lo que está buscando:

for szFile in /path/*.png
do 
    convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ; 
done

Arriba dejará intactos los archivos existentes y copiará los nuevos a /tmp para que pueda moverlos o copiarlos o incluso reemplazar los existentes después de la conversión.

(y funcionará en todas las versiones recientes de Ubuntu ya que es un software estándar)

    
respondido por el Fabby 06.03.2015 - 15:52
20
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Esto copiará rotar y renombrará sus archivos.

Si aún no quieres tocar los archivos originales, este método puede funcionar bien para ti ...

Tenga en cuenta que esto distingue entre mayúsculas y minúsculas: si sus archivos se llaman * .jpg, reemplace por minúsculas (o * .png ...) en consecuencia.

    
respondido por el nutty about natty 13.08.2015 - 12:56
4

Así es como lo hago:

  1. Instalar gThumb

    sudo apt-get install gthumb
    
  2. Abre nautilus y ve al directorio de imágenes. Haga clic derecho en uno y elija Open with -> gthumb .

  3. En el menú view , seleccione Browser o presione la tecla Esc . Esto abrirá el navegador del directorio que muestra todas sus imágenes.

  4. Presione Ctrl y seleccione las imágenes que desea rotar o selecciónelas a través de Ctrl + A .

  5. En la barra de herramientas, seleccione Tools y luego Rotate Right o Rotate Left según su preferencia.

respondido por el Parto 02.03.2015 - 10:55
0

Una buena solución es crear un conjunto de copias de seguridad (por ejemplo, backup- prefijado), rotar los archivos originales y producir un conjunto de archivos nuevos (prefijado, por ejemplo, rotated- ), lo que le proporciona un conjunto de

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ... y así sucesivamente

El mv / cp tools [bash globbing] solo puede agregar prefijos, es complicado quitarlos (usaría la expansión de parámetros, ewww ...)

La herramienta rename le permite usar la sintaxis de sustitución s/before/after/ (de la herramienta sed ) para intercambiar ese prefijo de salvaguarda y sobrescribir los archivos originales, por lo que su proceso general para un conjunto dado de imágenes img- < strong> {1..n} .png sería:

for imgf in img-*.png; do mv "$imgf" "backup-$imgf"; done
for imgf in backup-img-*.png; do convert "$imgf" -rotate 90 "rotated-$imgf"; done

Nota:

  • puedes usar cp en vez de mv , pero luego hay 2 copias del original por ahí (a la baja tienes concatenación de prefijos, " rotated-backup- ...")
  • la rotación es en sentido horario ( -rotate 270 te lleva 90 ° en sentido antihorario)
  • para realizar un seguimiento del progreso, agregue echo "Rotating ${imgf#backup-} ... "; después de convert llamadas (antes de done )
  • para una forma más compacta (por ejemplo, un conjunto de archivos numerados), use alguna expansión de parámetros como echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)..."; en su lugar

    (No se puede eliminar el prefijo y el sufijo en la misma expansión de param del bash, por lo tanto, use cut )

Luego de verificar que no se ha equivocado, borre las imágenes volviéndolas a la original

rename 's/^rotated-//;' rotated-*
rm backup-img-*
    
respondido por el Louis Maddox 09.09.2016 - 20:39
0

Puede copiar / pegar este código y guardarlo como rotate.sh

#!/bin/bash -e

CUR_DIR=$(pwd)
cd 
for file in *.jpg
do
    convert $file -rotate 90 $file
done
cd $CUR_DIR

Después de guardar este archivo, ejecútelo desde la terminal usando ./rotate.sh folder_containing_images .

    
respondido por el vin 31.03.2017 - 19:13

Lea otras preguntas en las etiquetas