Girar imagens do terminal

34

Eu tenho um diretório com muita imagem, mas eles estão na orientação errada. Quero girar as imagens para corrigir a orientação (principalmente ± 90 o ). Usando o visualizador de imagens (foto), eu posso girá-los individualmente clicando no botão girar, mas isso é muito entediante.

Eu olhei man shotwelle shotwell --help-allnão há nada que explique como chamar o comando rotate na linha de comando.

Existe alguma maneira de chamar o comando rotate do shotwell (ou qualquer outro visualizador) a partir do terminal? Ou quaisquer outros métodos para rotacionar imagens também são bem-vindos.

pranphy
fonte
1
askubuntu.com/a/432662/15811 se você quiser do nautilus. Mas o comando de terminal que você quer é "convertido" de "imagemagick"
Rinzwind
1
Se você deseja uma rotação sem perdas e os arquivos são jpeg, dê uma olhada no jpegtran ; O imagemagick fará uma rotação (francamente pequena) com perdas .
Rmano

Respostas:

39

Se você está procurando uma implementação pura do bash, o convertcomando do ImageMagick é o que você está procurando:

for szFile in /path/*.png
do 
    convert "$szFile" -rotate 90 /tmp/"$(basename "$szFile")" ; 
done

Acima, os arquivos existentes permanecerão intactos e copiarão os que foram girados recentemente para /tmpque você possa movê-los ou copiá-los para outro lugar ou até mesmo substituir os existentes após a conversão e a verificação .

(e funcionará em todas as versões recentes do Ubuntu como software padrão)

Fabby
fonte
28
for file in *.JPG; do convert $file -rotate 90 rotated-$file; done

Isso irá copiar, girar e renomear seus arquivos.

Se você deseja deixar os arquivos originais intocados ainda, esse método pode funcionar bem para você ...

Observe que isso faz distinção entre maiúsculas e minúsculas: se seus arquivos forem nomeados * .jpg, substitua por minúsculas (ou * .png ...) de acordo.

noz sobre natty
fonte
4

Se você deseja substituir no local, a mogrifypartir do pacote ImageMagick parece ser a maneira mais fácil de conseguir isso:

# counterclockwise:
mogrify -rotate -90 *.jpg

# clockwise:
mogrify -rotate 90 *.jpg

CAVEAT : este não é um método de rotação sem perdas para arquivos JPEG, https://www.imagemagick.org/discourse-server/viewtopic.php?t=5899 . jpegtranconsegue isso (não testado):

# counterclockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 270

# clockwise
ls *.jpg | xargs -n 1 jpegtran -perfect -rotate 90
krlmlr
fonte
Funciona perfeitamente
Paul Jones
Mogrify é uma faca suíça quando se trata de edição de imagens simples, rápida e em lote
EA304GT 23/07
melhor resposta, por que você não gostaria de fazer isso no local?
mLstudent33
1
@ mLstudent33: Boa pergunta. Parece que mogrifynão é sem perdas para arquivos JPEG, mas jpegtrané.
krlmlr 10/11
3

Aqui está como eu faço:

  1. Instale o gThumb

    sudo apt-get install gthumb
  2. Abra o nautilus e vá para o seu diretório de imagens. Clique com o botão direito do mouse em um e escolha Open with -> gthumb.

  3. No viewmenu, escolha Browserou pressione a Esctecla Isso abrirá o navegador de diretório, mostrando todas as suas imagens.

    insira a descrição da imagem aqui

  4. Pressione Ctrle selecione as imagens que deseja girar ou selecione todas elas via Ctrl+ A.

  5. Na barra de ferramentas, selecione Toolse, em seguida, Rotate Rightou Rotate Leftdependendo da sua preferência.

    insira a descrição da imagem aqui

Parto
fonte
0

Uma boa solução é fazer um conjunto de backups (por exemplo, prefixado backup-), girar os arquivos originais produzindo um conjunto de novos arquivos (por exemplo rotated-, prefixados ), fornecendo um conjunto de

  • img-1.png
  • backup-img-1.png
  • rotated-img-1.png
  • img-2.png
  • ...e assim por diante

O mv/ cptools [bash globbing] só pode adicionar prefixos, é confuso removê-los (ele usaria expansão de parâmetros, ewww ...)

A renameferramenta permite que você use a s/before/after/sintaxe de substituição (da sedferramenta) para trocar esse prefixo de proteção e substituir os arquivos originais; portanto, seu processo geral para um determinado conjunto de imagens img-{1..n}.png seria:

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:

  • você poderia usar em cpvez de mv, mas existem 2 cópias do original (a desvantagem é a concatenação de prefixos, " rotated-backup-...")
  • a rotação é no sentido horário ( -rotate 270você obtém 90 ° no sentido anti-horário)
  • para acompanhar o progresso, adicione echo "Rotating ${imgf#backup-} ... ";depois das convertchamadas (antes done)
  • para uma forma mais compacta (por exemplo, um conjunto de arquivos numerados), usar alguma expansão de parâmetros como echo "$(echo ${imgf#backup-img-} | cut -d\. -f 1)...";em vez

    (Você não pode remover o prefixo e o sufixo na mesma expansão do bash param, portanto, use cut)

Depois da verificação, você não estragou tudo e exclua as fotos, movendo-as de volta para a original.

rename 's/^rotated-//;' rotated-*
rm backup-img-*
Louis Maddox
fonte
0

Você pode copiar / colar este código e salvá-lo como rotate.sh

#!/bin/bash -e

CUR_DIR=$(pwd)
cd $1
for file in *.jpg
do
    convert $file -rotate 90 $file
done
cd $CUR_DIR

Depois de salvar este arquivo, execute-o no terminal usando ./rotate.sh folder_containing_images.

vin
fonte
Por favor, verifique seu código e o link fornecido!
George Udosen 31/03