Bem, a maneira mais fácil de fazer isso seria usar o ImageMagick . Ele deve estar nos repositórios da sua distribuição Linux, para sistemas baseados em debian, execute:
sudo apt-get install imagemagick
Um dos programas do ImageMagick é identify
o de imprimir as características de uma lista de arquivos de imagem de entrada. Combiná-lo com sort
, fornecerá uma lista de imagens classificadas por tamanho (você pode alterar png para qualquer extensão que tenha:
identify *png | sort -gk 3
Se você realmente precisa da proporção e não apenas do tamanho, tente algo como isto:
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 depois imprime o 1º campo (o nome da imagem) e o resultado da divisão do comprimento da imagem pela sua altura. O sed
comando está apenas embelezando a saída e o sort
comando classifica o resultado de acordo com a proporção do tamanho da imagem.
Mais complexo, este pode lidar com espaços nos nomes dos 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 identify
comando e, em seguida, canalizar 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 que descobrimos isso, é fácil identificar o nome e as dimensões da imagem.
Não estou usando o gawk aqui porque a presença de espaços nos nomes dos arquivos de entrada confundirá os números dos campos. Finalmente, o script imprimirá o nome da imagem e o resultado da divisão comprimento / altura que sort
numericamente.
Se simplesmente navegar nas proporções disponíveis não for suficiente, se você tiver pelo menos uma imagem com a proporção desejada, basta usar grep para extrair as imagens cuja proporção estiver 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
identify -format "%[fx:w/h]:%M\n" *.jpg
. Não sei como classificar facilmente por proximidade a um valor arbitrário.sort
parece não apoiar essa classificação.