Como girar imagens automaticamente, com base em dados exif

31

Quando tiro fotos com minha câmera (Olympus E-520), nos dados EXIF, a orientação é armazenada.

O visualizador de imagens padrão no Ubuntu está exibindo essas imagens corretamente. Visualizador do Windows, no entanto, não.

Existe uma maneira de realmente girar essas imagens (se necessário, de acordo com o EXIF) em um lote no Ubuntu? Por exemplo, com uma ferramenta ImageMagick?

Peter Smit
fonte

Respostas:

37

exiftrane JHead ( jhead -autorot) podem fazer isso. exiftranpode fazer isso sem perdas, não tenho certeza jhead.

user7963
fonte
1
exiftran parece que é exatamente o que eu preciso!
22613 Peter Smit
3
jhead -autorot chama jpegtran, que pode fazer uma rotação perfeitamente sem perdas. Eu tinha esquecido tudo sobre o material sem perdas da IJG. jpegclub.org/losslessapps.html O Exiftran também pode fazer rotação sem perdas e é melhor que o jpegtran, porque respeita as informações exif no arquivo de imagem. Você deve observar, no entanto, que às vezes (e não tenho certeza de todos os detalhes), você não pode girar sem perdas. Portanto, se você implementar um script com jhead para identificar a rotação necessária (semelhante à minha anterior, mas com uma instrução de caso para lidar com todas as rotações), deverá apoiar a volta à rotação com perdas.
opello 14/09/09
1
Fiz alguns testes com o exiftran -a (rotação automática com base na etiqueta de orientação exif) e parece funcionar muito bem. No que diz respeito à rotação sem perdas, não consegui recuperar a imagem de origem executando o inverso da rotação realizada. Exiftool -F 1.jpg -o 2.jpg; exiftool -F 2.jpg -o 3.jpg; md5sum de 1.jpg e 3.jpg não são os mesmos. Após uma inspeção mais minuciosa (com comparação binária de mesclagem Araxis), às vezes eram apenas informações exif do cabeçalho que diferiam, outras vezes eram grandes alterações no arquivo. No entanto, a comparação de imagens da fusão da Araxis não mostrou pixels inalterados.
Opello 14/09/09
Não quis dizer * pixels alterados (eram imagens idênticas a pixels). Além disso - não tenho certeza do protocolo stackoverflow / superusuário, mas acho que o dmityugov deve obter este por recomendar a ferramenta adequada.
Opello 14/09/09
1
Eu descobri que o exiftran pode remover alguns metadados do arquivo. Por exemplo, as imagens capturadas pelo Samsung Galaxy S2 têm um campo de carimbo de data / hora (possivelmente não EXIF) e o exiftran o remove. O exiftran -a também altera a imagem que não precisa de rotação. jhead -autorot está livre de ambos os problemas. OTOH, falta a opção de preservar o arquivo mtime (mas há a opção -ft como solução alternativa).
pfalcon
12

A ferramenta de conversão do ImageMagick possui um sinalizador -auto-orientado, que deve fazer o trabalho.

#!/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

Criei um script rápido para iterar sobre * .jpg no diretório atual. Você pode modificá-lo facilmente para seguir um caminho (US $ 1) ou o que precisar.

opello
fonte
1
Ótimo! Aquele que eu não encontrei. Eu o uso com mogrify para fazer um lote de imagens. Apenas uma pergunta: por que reescreve todas as imagens, mesmo que não devam mudar? (Os hash diferem)
Peter Smit
Não sei por que, mas parece fazer uma recodificação completa observando o diff de imagem e o diff binário.
Opello 09/09/09
Uau, isso é ótimo. Muito obrigado. Se nenhuma outra super boa resposta for adicionada, certamente aceitarei esta.
6119 Peter Smit
2

Você pode usar o XnView para fazer isso. Confira estas páginas para obter informações sobre como usar o XnView para fazer a rotação automática no modo em lote:

No Windows, você pode fazer isso usando o IrfanView . Na seção de perguntas frequentes do site IrfanView:

P: Como usar operações sem perda de JPG (rotação, IPTC, comentário) no modo em lote?

R: Inicie a janela Miniatura, abra a pasta com JPGs, selecione muitos JPGs e veja no menu de miniaturas Arquivo para Operações sem perda de JPG -> transformações sem perdas com os polegares selecionados. Nota: A opção de rotação automática funciona apenas se a etiqueta de orientação EXIF ​​estiver salva corretamente (não no canto superior esquerdo).

swatkat
fonte
1

Com o ImageMagick, você também pode usar mogrify para girar os arquivos e gravar a imagem girada de volta aos nomes dos arquivos originais.

mogrify -auto-orient *.jpg
Andy Gee
fonte