Ruota le immagini dal terminale


34

Ho una directory con molte immagini ma hanno un orientamento errato. Voglio ruotare le immagini per correggere l'orientamento (principalmente ± 90 o ). Usando il visualizzatore di immagini (foto shotwell) posso ruotarli singolarmente facendo clic sul pulsante di rotazione ma è troppo noioso.

Ho osservato man shotwelle shotwell --help-allnon c'è nulla che spieghi come invocare il comando di rotazione dalla riga di comando.

Esiste un modo per invocare il comando di rotazione di shotwell (o qualsiasi altro visualizzatore) dal terminale? O anche qualsiasi altro metodo per ruotare le immagini è il benvenuto.


1
askubuntu.com/a/432662/15811 se lo desideri da nautilus. Ma il comando terminale che vuoi è "converti" da "imagemagick"
Rinzwind

1
Se vuoi una rotazione senza perdita e i file sono jpeg, dai un'occhiata a jpegtran ; imagemagick eseguirà una rotazione (francamente piccola) con perdita .
Rmano,

Risposte:


39

Se stai cercando un'implementazione bash pura, il convertcomando di ImageMagick è quello che stai cercando:

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

Sopra lascerà intatti i file esistenti e copieranno quelli appena ruotati in /tmpmodo da poterli spostare o copiarli altrove o addirittura sostituire quelli esistenti dopo la conversione e dopo la verifica .

(e funzionerà su tutte le versioni recenti di Ubuntu in quanto è un software standard)


28
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Questo copierà, ruoterà e rinominerà i tuoi file.

Se vuoi lasciare intatti i file originali, questo metodo potrebbe funzionare bene per te ...

Nota che fa distinzione tra maiuscole e minuscole: se i tuoi file sono chiamati * .jpg, sostituiscili con lettere minuscole (o * .png ...) di conseguenza.


4

Se vuoi sovrascrivere sul posto, mogrifydalla suite ImageMagick sembra essere il modo più semplice per raggiungere questo obiettivo:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : questo non è un metodo di rotazione senza perdita di dati per i file JPEG, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 . jpegtranraggiunge questo (non testato):

# counterclockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90

Funziona perfettamente
Paul Jones,

Mogrify è piuttosto un coltellino svizzero quando si tratta di editing di immagini in batch semplice, rapido
EA304GT

miglior risposta, perché non vorresti farlo sul posto?
mLstudent33

1
@ mLstudent33: bella domanda. Sembra che mogrifynon sia senza perdita di dati per i file JPEG, ma lo jpegtranè.
krlmlr

3

Ecco come lo faccio:

  1. Installa gThumb

    sudo apt-get install gthumb
  2. Apri nautilus e vai alla directory delle immagini. Fai clic destro su uno e scegli Open with -> gthumb.

  3. Sotto il viewmenu scegli Browsero premi il Esctasto. Questo aprirà il browser di directory che mostra tutte le tue immagini.

    inserisci qui la descrizione dell'immagine

  4. Premere Ctrle selezionare le immagini che si desidera ruotare o selezionarle tutte tramite Ctrl+ A.

  5. Sulla barra degli strumenti, selezionare Toolse quindi Rotate Righto in Rotate Leftbase alle proprie preferenze.

    inserisci qui la descrizione dell'immagine


0

Una buona soluzione è quella di creare un set di backup (ad esempio con prefisso backup-), ruotare i file originali producendo un set di nuovi file (ad esempio con prefisso rotated-), dandoti un set di

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...e così via

Il mv/ cptools [bash globbing] può solo aggiungere prefissi, è disordinato portarli via (userebbe l'espansione dei parametri, ewww ...)

Lo renamestrumento consente di utilizzare la s/before/after/sintassi di sostituzione (dallo sedstrumento) per scambiare quel prefisso di salvaguardia e sovrascrivere i file originali, quindi il processo complessivo per un determinato set di immagini img-{1..n}.png sarebbe:

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:

  • si potrebbe usare cppiuttosto che mv, ma poi ci sono 2 copie dell'originale in giro (il rovescio della medaglia è che si ottiene la concatenazione di prefissi, " rotated-backup-...")
  • la rotazione è in senso orario ( -rotate 270ti porta a 90 ° in senso antiorario)
  • per monitorare l'avanzamento, aggiungere echo "Rotating ${imgf#backup-} ... ";dopo le convertchiamate (prima done)
  • per una forma più compatta (ad esempio un insieme di file numerati), utilizzare alcuni espansione di parametro come echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";invece

    (Non puoi rimuovere prefisso e suffisso nella stessa espansione di parametro bash quindi usa cut)

Quindi dopo la verifica non hai incasinato, elimina le immagini riportandole all'originale

rename 's/^rotated-//;' rotated-*
rm backup-img-*

0

È possibile copiare / incollare questo codice e salvarlo come rotate.sh

#!/bin/bash -e

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

Dopo aver salvato questo file, eseguirlo dal terminale utilizzando ./rotate.sh folder_containing_images.


Controlla il tuo codice e il link fornito!
George Udosen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.