Como rodar um conjunto de imagens a partir da linha de comando?

10

Eu tenho um grande conjunto de imagens JPEG, todas com a mesma resolução. Levaria muito tempo para abrir cada um dentro da interface gráfica do imagemagic ou gimp.

Como faço para que cada foto seja girada e salva como o mesmo nome de arquivo?

    
por sharkant 17.05.2017 / 13:29

2 respostas

13

Você pode usar o comando convert :

 convert input.jpg -rotate -degrees out.jpg

e, g:

convert input.jpg -rotate -180 out.jpg

Salve com o mesmo nome:

convert file.jpg -rotate -180 file.jpg

Rodar todos os arquivos:

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

Editar

Você pode usar as ferramentas de linha de comando mogrify (a melhor ferramenta) recomendadas por @ don-crissti

mogrify -rotate 90 *.jpg
    
por 17.05.2017 / 13:39
16

Para imagens JPEG e rotações em ângulo reto, use jpegtran ou exiftran , pois eles podem rotacionar as imagens sem perdas.

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

Ou para girar no local:

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

exiftran também possui o sinalizador -a para girar a imagem automaticamente com base no que a tag de orientação EXIF diz.

    
por 17.05.2017 / 14:08