Redimensiona a imagem para um tamanho máximo na linha de comando

5

Eu tenho uma coleção muito grande de imagens muito grandes, e quero criar uma galeria de miniaturas na qual as imagens são redimensionadas para um máximo de largura mínima (você vai entender) de 180px.

Por exemplo: Se a imagem for de 2400 x 1800, ela será redimensionada para 240 x 180 Senão, se for 1600x1800, ele será redimensionado para 180x202

Está claro? O tamanho menor da imagem deve ser exatamente 180, não importa se é a largura ou a altura.

Como isso é possível com a linha de comando? Eu sei como redimensionar cada arquivo para um determinado tamanho, mas não com tamanhos diferentes.

    
por ranisalt 16.11.2013 / 23:40

1 resposta

5

Que tal usar o convert do ImageMagick que tem exatamente essa opção de tamanho mínimo , veja Geometria da imagem opções?!

Copiar & Colar snippet (sintaxe bash) - por favor, observe o ^ após a especificação do tamanho:

for file in *.jpg; do
   echo -n Converting ${file}...
   convert -resize 180x180^ "$file" "th_$file"
   echo done
done

Além disso, se você quiser cortar o arquivo resultante em uma forma quadrática ao redor do centro, poderá usar esse script. O parâmetro SIZE na primeira linha especifica (surpresa, surpresa) o tamanho final da miniatura.

SIZE=180
for file in *.jpg; do
   echo -n Converting ${file}...
   convert -resize ${SIZE}x${SIZE}^ "$file" temp.png
   convert -crop $(identify temp.png | awk -F'[ x]' -v SIZE=$SIZE '{ printf "%ux%u+%u+%u", SIZE, SIZE, ($3-SIZE)/2, ($4-SIZE)/2 }') temp.png "th_$file"
   echo done
done
rm temp.png

O script não é muito otimizado, pois executa dois comandos ( identify e convert -crop ) na miniatura. Mas como a miniatura é pequena, acho que a velocidade é razoável.

    
por 16.11.2013 / 23:51