Pode-se esperar que
convert in.jpg -resize "448x336!" out.jpg
não tocaria no arquivo se o tamanho já estiver correto?
Não é claro - mas pensando na forma como o formato da linha de comando da imagemagic funciona, isso não é surpreendente.
Portanto, as dimensões da imagem de cada arquivo precisam ser verificadas primeiro.
Agora, queremos usar o ImageMagic, que possui o comando identify
para esse propósito;
identify -format "%wx%h\n" file.jpg
mostra apenas o tamanho em WxH
format, como 448x336
.
Queremos redimensionar se o tamanho não for 448x336
. Nesse caso, usamos convert
para redimensionar para 448x336
- precisamos informar convert
que queremos redimensionar mesmo que isso signifique alterar a proporção para forçar a imagem para as novas dimensões - fazemos isso adicionando um !
como uma opção / sinalizador na especificação de tamanho:
convert in.jpg -resize "448x336!" out.jpg
faz o redimensionamento de que precisamos. Mas nós não temos um nome de arquivo fixo para a saída. Vamos pegar o nome original e inserir -res
antes do .jpg
, como in-res.jpg
:
convert in.jpg -resize "448x336!" -set filename:path "%d/%t-res.%e" "%[filename:path]"
Nós usamos o comando find
para percorrer os diretórios para ' .jpg' images - or " .JPG".
A parte identify
é executada em um shell para usar o comando test
, [ ... ]
.
Eu também uso um shell para o comando convert
, que é executado se a primeira ação -exec
(não a opção) for bem-sucedida. Neste caso, é apenas para executar um segundo comando depois de redimensionar, mostrando uma mensagem para cada arquivo redimensionado.
find . -type f -iname "*.jpg" -exec bash -c \
'[ $(identify -format "%wx%h\n" "{}") != 448x336 ]' \; -exec bash -c \
'convert "{}" -resize "448x336!" -set filename:path "%d/%t-res.%e" \
"%[filename:path]" ; echo "Resized {}"' \;
Em vez do segundo bash
, pode-se usar -exec convert ...
simples e adicionar uma nova ação, como -print
ou -ls
, para mostrar os nomes dos arquivos redimensionados.
O comando é uma linha tecnicamente (mostrada com linhas de continuação para evitar a rolagem).
E, após essa explicação, de alguma forma eu sinto que a linha ainda não é fácil de ler ...