Bueno, la forma más fácil de hacer esto sería usar ImageMagick . Debe estar en los repositorios de su distribución de Linux, para sistemas basados en Debian, ejecute:
sudo apt-get install imagemagick
Uno de los programas de la suite ImageMagick es identify
que imprimirá las características de una lista de archivos de imagen de entrada. Combinarlo con sort
le dará una lista de imágenes ordenadas por tamaño (puede cambiar png para cualquier extensión que tenga:
identify *png | sort -gk 3
Si realmente necesita la relación de aspecto y no solo el tamaño, intente algo como esto:
Opción simple, supone que los nombres de sus imágenes no tienen espacios :
identify *png *jpg *gif | \
gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | \
sed 's/\[.\]//' | sort -gk 3
El comando gawk divide el tercer campo (el tamaño de la imagen que tiene el formato LxH) en los "tamaños" de la matriz y luego imprime el primer campo (el nombre de la imagen) y el resultado de dividir la longitud de la imagen por su altura. lossed
comando simplemente embellece la salida y sort
ordena el resultado de acuerdo con la relación de tamaño de imagen.
Más complejo, este puede tratar con espacios en los nombres de archivo:
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
Aquí estamos utilizando find
para identificar los archivos que nos interesan y ejecutar elidentify
comando, y luego canalizar su salida a través de un pequeño script PERL. La expresión regular busca tres letras mayúsculas ( [A-Z]{3}
) que deberían ser el formato de imagen. Una vez que hayamos encontrado eso, es fácil identificar el nombre y las dimensiones de la imagen.
No estoy usando gawk aquí porque la presencia de espacios en los nombres de los archivos de entrada confundirá los números de campo. Finalmente, el script imprimirá el nombre de la imagen y el resultado de la división de longitud / altura que sort
numéricamente.
Si simplemente explorar las relaciones de aspecto disponibles no es suficiente, si tiene al menos una imagen con la relación de aspecto deseada, solo use grep para extraer esas imágenes cuya relación es más cercana:
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
. No sé cómo ordenar fácilmente por proximidad a un valor arbitrario.sort
no parece apoyar tal clasificación.