Ruota le immagini dal terminale

24

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 (shotwell), posso ruotarle individualmente facendo clic sul pulsante di rotazione, ma è troppo noioso.

Ho visto man shotwell e shotwell --help-all ma non c'è nulla che spieghi come richiamare il comando di rotazione dalla riga di comando.

C'è un modo in cui posso richiamare il comando di rotazione di shotwell (o qualsiasi altro visualizzatore) dal terminale? O anche altri metodi per ruotare le immagini sono ben accetti.

    
posta Prakash Gautam 02.03.2015 - 09:20

6 risposte

27

Se stai cercando un'implementazione bash pura, il comando convert 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 copierà i nuovi in /tmp in modo da poterli spostare / copiare o addirittura sostituire quelli esistenti dopo la conversione.

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

    
risposta data Fabby 06.03.2015 - 16:52
21
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Questo copierà- ruota -e rinominerà i tuoi file.

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

Notare che si fa distinzione tra maiuscole e minuscole: se i file si chiamano * .jpg sostituiti con lettere minuscole (o * .png ...) di conseguenza.

    
risposta data nutty about natty 13.08.2015 - 14:56
3

Ecco come lo faccio:

  1. Installa gThumb

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

  3. Sotto il menu view scegli Browser o premi la chiave Esc . Questo aprirà il browser della directory che mostra tutte le tue immagini.

  4. PremiCtrleselezionaleimmaginichevuoiruotareoselezionaletuttetramiteCtrl+A.

  5. Sullabarradeglistrumenti,selezionaToolsepoiRotateRightoRotateLeftasecondadelletuepreferenze.

risposta data Parto 02.03.2015 - 11:55
1

Se vuoi sovrascrivere sul posto, mogrify dalla suite ImageMagick sembra essere il modo più semplice per ottenere ciò:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg
    
risposta data 24.09.2018 - 19:15
0

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

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

Gli strumenti mv / cp [bash globbing] possono solo aggiungere prefissi, è disordinato portarli via (userebbe l'espansione dei parametri, ewww ...)

Lo strumento rename consente di utilizzare la sintassi di sostituzione s/before/after/ (dallo strumento sed ) per scambiare il prefisso di salvaguardia e sovrascrivere i file originali, quindi il processo complessivo per un determinato set di immagini img- < forte> {1..}} .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:

  • potresti usare cp invece di mv , ma poi ci sono 2 copie dell'originale che giacciono (il lato negativo è la concatenazione dei prefissi, " rotated-backup- ...")
  • la rotazione è in senso orario ( -rotate 270 ti fa ruotare di 90 ° in senso antiorario)
  • per monitorare i progressi, aggiungi echo "Rotating ${imgf#backup-} ... "; dopo% chiamate di co_de% (prima di convert )
  • per una forma più compatta (ad esempio un insieme di file numerati), usa alcuni parametri di espansione come done invece

    (Non puoi rimuovere prefisso e suffisso nella stessa espansione paramh di bash quindi usa echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)..."; )

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

rename 's/^rotated-//;' rotated-*
rm backup-img-*
    
risposta data Louis Maddox 09.09.2016 - 22:39
0

Puoi 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, eseguilo dal terminale usando ./rotate.sh folder_containing_images .

    
risposta data vin 31.03.2017 - 21:13

Leggi altre domande sui tag