¿Cómo rotar un conjunto de imágenes desde la línea de comando?

17

Tengo un gran conjunto de imágenes JPEG, todas con la misma resolución. Tardaría demasiado en abrir cada uno dentro de la interfaz gráfica de imagemagic o gimp.

¿Cómo consigo que cada imagen se rote y guarde con el mismo nombre de archivo?

Sharkant
fuente
3
Ver aquí . Sin embargo, tenga en cuenta que volver a codificar JPEG es generalmente con pérdidas.
Satō Katsura

Respuestas:

22

Puedes usar el convertcomando:

 convert input.jpg -rotate -degrees out.jpg

p.ej:

convert input.jpg -rotate -180 out.jpg

Guárdelo con el mismo nombre:

convert file.jpg -rotate -180 file.jpg

Rotar todos los archivos:

for photo in *.jpg ; do convert $photo -rotate 90 $photo ; done

Editar

Puede usar las mogrifyherramientas de línea de comandos (la mejor herramienta) recomendadas por @ don-crissti

mogrify -rotate 90 *.jpg
GAD3R
fuente
1
Gracias, ¿cómo le digo al comando que el nombre de archivo a la izquierda de -rotate -180 tiene que ser el mismo que el de la derecha, si hay muchos archivos?
Sharkant
Girar un archivo 180 grados siempre le dará el mismo resultado, sin importar si lo gira hacia la izquierda o hacia la derecha.
djsmiley2k en la oscuridad
@ GAD3R 360 grados dará como resultado la misma imagen después. Rotando una imagen hacia la izquierda o hacia la derecha 180 grados, con ambas le da la misma imagen (pero al revés).
djsmiley2k en la oscuridad
2
$CAPITAL_NAMESdebe dejarse a las variables de entorno; para esas variables locales en scripts de shell o comandos de uso$normal_lowercase
cat
2
convertvuelve a codificar JPEG y, por lo tanto, tiene pérdidas. Mejor usojpegtran
imz - Ivan Zakharyaschev
16

Para imágenes JPEG y rotaciones en ángulo recto, use jpegtrano exiftran, ya que pueden rotar las imágenes sin pérdidas.

for f in *.jpg ; do 
    jpegtran -rotate 180 "$f" > "${f%.jpg}-rotated.jpg"
done

O para rotar en el lugar:

for f in *.jpg ; do
    jpegtran -rotate 180 -outfile "$f" "$f"
done

exiftrantambién tiene la -abandera para rotar automáticamente la imagen según lo que dice la etiqueta de orientación EXIF.

ilkkachu
fuente
Para la rotación en sentido antihorario (ángulo izquierdo) con jpegtran, use -rotate 270y con la -2bandera de uso exiftran de acuerdo con el manual.
Timo