Como girar um conjunto de imagens na linha de comando?

17

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 com o mesmo nome de arquivo?

tubarão
fonte
3
Veja aqui . Cuidado, porém, que a recodificação de JPEG geralmente é com perdas.
Satō Katsura

Respostas:

22

Você pode usar o convertcomando:

 convert input.jpg -rotate -degrees out.jpg

por exemplo:

convert input.jpg -rotate -180 out.jpg

Salve-o com o mesmo nome:

convert file.jpg -rotate -180 file.jpg

Gire todos os arquivos:

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

Editar

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

mogrify -rotate 90 *.jpg
GAD3R
fonte
1
thx, como digo ao comando que o nome do arquivo à esquerda de -rotate -180 deve ser o mesmo à direita, se houver muitos arquivos?
Sharkant 17/05/19
Girar um arquivo 180 graus sempre dará o mesmo resultado, não importa se você o girar para a esquerda ou direita.
djsmiley2k in darkness
@ GAD3R 360 graus resultará na mesma imagem posteriormente. Girar uma imagem para a esquerda ou direita em 180 graus, com as duas, fornece a mesma imagem (mas de cabeça para baixo).
djsmiley2k in darkness
2
$CAPITAL_NAMESdeve ser deixado para variáveis ​​de ambiente; para essas variáveis ​​locais no uso de scripts ou comandos de shell$normal_lowercase
cat
2
convertrecodifica o JPEG e, portanto, é com perdas. Melhor usojpegtran
imz - Ivan Zakharyaschev
16

Para imagens JPEG e rotações em ângulo reto, use jpegtranou exiftran, pois elas podem girar 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

exiftrantambém possui o -asinalizador para girar automaticamente a imagem com base no que a etiqueta de orientação EXIF ​​diz.

ilkkachu
fonte
Para rotação no sentido anti-horário (ângulo esquerdo) com jpegtran, use -rotate 270e com exiftran, use a -2bandeira de acordo com o manual.
Timo