Come ruotare le immagini automaticamente, in base ai dati exif


31

Quando faccio foto con la mia fotocamera (Olympus E-520), nei dati EXIF ​​l'orientamento viene memorizzato.

Il visualizzatore di immagini standard su Ubuntu sta visualizzando correttamente queste immagini. Visualizzatore di Windows tuttavia no.

C'è un modo per ruotare davvero queste immagini (se necessario secondo EXIF) in un batch su Ubuntu? Ad esempio con uno strumento ImageMagick?

Risposte:


37

exiftrane JHead ( jhead -autorot) può farlo. exiftranpuò farlo senza perdita di dati, non ne sono sicuro jhead.


1
exiftran sembra esattamente quello di cui ho bisogno!
Peter Smit,

3
jhead -autorot invoca jpegtran, che può eseguire una rotazione senza perdita di dati. Avevo dimenticato tutto sulle cose senza perdita di IJG. jpegclub.org/losslessapps.html Exiftran può anche eseguire una rotazione senza perdita ed è meglio di jpegtran perché rispetta le informazioni exif nel file di immagine. Dovresti notare tuttavia che a volte (e non sono sicuro su tutti i dettagli) non puoi ruotare senza perdita di dati. Quindi, se si implementa uno script con jhead per identificare la rotazione necessaria (simile alla mia precedente, ma con un'istruzione case per gestire tutte le rotazioni), è necessario supportare il ritorno alla rotazione con perdita.
opello,

1
Ho fatto alcuni test con exiftran -a (rotazione automatica basata sul tag di orientamento exif) e sembra funzionare molto bene. Per quanto riguarda la rotazione senza perdita, non sono riuscito a recuperare l'immagine sorgente eseguendo l'inverso della rotazione eseguita. Ad esempio exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum di 1.jpg e 3.jpg non sono gli stessi. A un esame più attento (con Araxis unisci il confronto binario) a volte erano solo le informazioni dell'intestazione exif che differivano, altre volte erano le principali modifiche nel file. Tuttavia, il confronto delle immagini di Araxis merge non ha mostrato pixel invariati.
Opello,

Non intendevo cambiare * pixel (erano immagini identiche ai pixel). Inoltre, non sono sicuro del protocollo stackoverflow / superuser, ma penso che dmityugov dovrebbe ottenere questo per raccomandare lo strumento adeguato.
Opello,

1
Ho scoperto che exiftran può rimuovere alcuni metadati dal file. Ad esempio, le immagini scattate da Samsung Galaxy S2 hanno un campo data / ora (possibilmente non EXIF) e Exiftran lo rimuoverà. exiftran -a modificherà anche l'immagine che non necessita di rotazione. jhead -autorot è privo di entrambi i problemi. OTOH, manca l'opzione per preservare il file mtime (ma c'è l'opzione -ft come soluzione alternativa).
falco

12

Lo strumento di conversione di ImageMagick ha un flag -auto-orient che dovrebbe portare a termine il lavoro.

#!/bin/bash

JHEAD=jhead
SED=sed
CONVERT=convert

for f in *.jpg
do
        orientation=$($JHEAD -v $f | $SED -nr 's:.*Orientation = ([0-9]+).*:\1:p')

        if [ -z $orientation ]
        then
                orientation=0
        fi

        if [ $orientation -gt 1 ]
        then
                echo Rotating $f...
                mv $f $f.bak
                $CONVERT -auto-orient $f.bak $f
        fi
done

Ho messo insieme un breve script per scorrere su * .jpg nella directory corrente. Puoi facilmente modificarlo per intraprendere un percorso ($ 1) o qualunque cosa ti serva.


1
Grande! Quello che non ho trovato. Lo uso con mogrify per fare una serie di immagini. Solo una domanda, perché riscrive tutte le immagini, anche se non dovrebbero cambiare? (Gli hash differiscono)
Peter Smit,

Non sono sicuro del perché, ma sembra fare una ricodifica completa guardando sia l'immagine diff sia una diff binaria.
Opello,

Wow, è fantastico. Grazie mille. Se non vengono aggiunte altre risposte super buone, accetterò sicuramente questa.
Peter Smit,

2

Puoi usare XnView per farlo. Dai un'occhiata a queste pagine per informazioni sull'uso di XnView per eseguire la rotazione automatica in modalità batch:

In Windows, puoi farlo usando IrfanView . Dalla sezione FAQ del sito Web di IrfanView:

D: Come utilizzare le operazioni senza perdita di JPG (rotazione, IPTC, commento) in modalità batch?

A: Avvia la finestra Miniatura, apri la cartella con JPG, seleziona molti JPG e vedi nel menu miniature File per operazioni senza perdita di JPG -> Trasformazioni senza perdita con i pollici selezionati. Nota: l'opzione di rotazione automatica funziona solo se il tag di orientamento EXIF ​​è stato salvato correttamente (non in alto a sinistra).


1

Con ImageMagick puoi anche usare mogrify per ruotare i file e riscrivere l'immagine ruotata sui nomi dei file originali.

mogrify -auto-orient *.jpg
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.