Bem, a maneira mais fácil de fazer isso seria usar o ImageMagick . Deve estar nos repositórios da sua distribuição Linux, para sistemas baseados no debian, execute:
sudo apt-get install imagemagick
Um dos programas do conjunto ImageMagick é identify
, isso imprimirá as características de uma lista de arquivos de imagem de entrada. Combinando-o com sort
, você terá uma lista de imagens ordenadas por tamanho (você pode alterar png para qualquer extensão que tenha:
identify *png | sort -gk 3
Se você realmente precisar da proporção e não apenas do tamanho, tente algo assim:
-
Opção simples, assume que os nomes das suas imagens não têm espaços :
identify *png *jpg *gif | \
gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | \
sed 's/\[.\]//' | sort -gk 3
O comando gawk divide o terceiro campo (o tamanho da imagem que tem o formato LxH) na matriz "tamanhos" e imprime o primeiro campo (o nome da imagem) e o resultado da divisão do comprimento da imagem pela sua altura. O comando sed
está apenas embelezando a saída e o comando sort
classifica o resultado de acordo com a proporção do tamanho da imagem.
-
Mais complexo, este pode lidar com espaços em nomes de arquivos:
find . \( -iname "*png" -o -iname "*jpg" -o -iname "*gif" \) -exec identify {} \; |\
perl -ne '/(.+?)\s+[A-Z]{3}\s+(\d+)x(\d+)/; print "$1 ", $2/$3, "\n"' | \
sort -gk 2
Aqui estamos usando find
para identificar os arquivos nos quais estamos interessados e executar o comando identify
e, em seguida, direcionando sua saída através de um pequeno script PERL. A expressão regular procura três letras maiúsculas ( [A-Z]{3}
) que devem ser o formato da imagem. Depois de descobrirmos isso, é fácil identificar o nome e as dimensões da imagem.
Eu não estou usando o gawk aqui porque a presença de espaços nos nomes dos arquivos de entrada irá confundir os números dos campos. Finalmente, o script irá imprimir o nome da imagem e o resultado da divisão comprimento / altura que nós sort
numericamente.
Se simplesmente pesquisar as proporções disponíveis não for suficiente, se você tiver pelo menos uma imagem com a proporção desejada, use grep para extrair aquelas imagens cuja proporção esteja mais próxima:
identify *png *jpg *gif | \
gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' |\
sed 's/\[.\]//' | sort -gk 3 | grep -C 10 GOOD_IMAGE.jpg