imagemagick imagens de recorte para proporção específica?

5

Dada uma imagem, como uso o imagemagick para redimensioná-la para uma proporção específica? por exemplo, para uma proporção de 2:1

    
por Little Child 25.04.2016 / 21:56

1 resposta

6

Duas coisas a considerar:

  1. Redimensionamento simples com ou sem conversão de proporção
  2. Corte com conversão de ração de aspecto

Eu abordo cada um por sua vez:

1. Redimensionamento simples com ou sem conversão de proporção

Por padrão,

imagemagick manterá a proporção de imagem preexistente de uma imagem durante as conversões. Usando esta imagem de teste:

que convenientemente tem as dimensões de 100x100, uma tentativa de redimensionar para 300x150 com esta sintaxe falhará silenciosamente :

convert test.png -resize 300x150 300_test.png

e produzirá uma imagem 150x150 :

Para forçar o imagemagick a produzir sua imagem de proporção 2: 1, a seguinte sintaxe ligeiramente diferente é necessária:

convert test.png -resize 300x150\! distort.png

E isso alcança uma proporção de 2: 1, com distorção da imagem original, é claro:

2. Recorte com conversão de ração de aspecto

Se você preferir simplesmente cortar uma imagem automaticamente para uma proporção especificada, a maneira mais fácil é usar uma das Scripts ImageMagick de Fred: 'Aspectcrop' . O uso em nossa imagem de teste é simplesmente:

./aspectcrop -a 2:1 test.png Fred_wins.png

e a imagem resultante foi cortada com sucesso para uma proporção de 2: 1:

A outra opção a ser manipulada é -g gravity , que define qual parte da imagem é usada para o recorte. O padrão é center, todas as opções são:

  1. centro (c)
  2. norte (n)
  3. sul (es)
  4. leste (e)
  5. oeste (w)
  6. noroeste (nw)
  7. nordeste (ne)
  8. sudoeste, (sw)
  9. sudeste (se)

Então, para dar um exemplo disso usando norte :

./aspectcrop -a 2:1 -g n test.png north.png

Os resultados são:

Se você precisasse usar este script para um carregamento em lote de imagens em um único diretório, você poderia usar um loop bash 'for'. Primeiro coloque o script corretamente e configure-o para executável:

sudo mv aspectcrop /usr/local/bin
sudo chmod +x /usr/local/bin/aspectcrop

Isso facilita muito o uso do script. Em seguida, execute o loop 'for' a partir de um diretório de imagens:

for i in *.png
do 
aspectcrop -a 2:1 -g n "$i" "${i%.png}_cropped.png"
done

Esse loop pode ser variado de acordo com o tipo de arquivos de entrada e saída, locais diferentes, etc. Você também pode produzir uma sintaxe semelhante que pesquisará recursivamente por imagens. Muitas possibilidades ...

Eu acho que é tudo muito legal:)

Referências:

por andrew.46 26.04.2016 / 04:00