Ordenar por resolução de imagem (dimensões)

5

Qual programa tem uma função para classificar as imagens pelo tamanho / resolução / dimensões do pixel.

O DigiKam, muito estranho mas ainda assim poderoso, não tem uma função tão simples.

Alguma sugestão?

    
por Bartek 07.07.2014 / 11:50

5 respostas

5

Se você estiver procurando por uma ferramenta de linha de comando, o comando a seguir classificará os arquivos de imagem em que a resolução mais alta vem primeiro:

find . -iname "*.png" -o -iname "*.jpg" | perl -e '$f=sub{eval('identify -format %w*%h ${\quotemeta(shift)} 2>/dev/null')};print sort{$f->($b)<=>$f->($a)}<>'

Estou basicamente classificando os arquivos usando a sub-rotina perl classificar , onde a chave aqui é chame o comando identify e avalie sua saída formatada.

identify está disponível com o pacote imagemagick :

sudo apt-get install imagemagick

UPDATE :

O seguinte comando também mostrará a resolução:

find . -iname "*.png" -o -iname "*.jpg" | perl -e '$f=sub{'identify -format %w*%h ${\quotemeta(shift)} 2>/dev/null'};chomp&&print "$_\t".$f->($_) for sort{eval($f->($b))<=>eval($f->($a))}<>'

Exemplo:

./foo bar.png   1600*900
./baz.png       1600*900
./img_0004.jpg  1280*720
./img_0006.jpg  1280*720
./img_0001.jpg  1280*720
./img_0003.jpg  1280*720
./img_0002.jpg  1280*720
./img_0005.jpg  1280*720
./launcher.png  385*632
./textfield.png 402*329
./foo2.png      202*229
    
por Sylvain Pineau 07.07.2014 / 13:13
5

Eu não tenho ideia de como isso funciona, mas o ImageMagick tem um aplicativo identify que eu tenho que aprender nos últimos dez minutos. Melhor que tudo, tem um argumento -format onde você pode fazer matemática!

find -iname '*.jpg' -exec identify -format "%[fx:w*h] %i\n" {} \+ | sort -g

Infelizmente, se você ficar acima de um certo tamanho, você obtém notação científica (por exemplo, 1,2 * 10 ^ 3) em vez de um número inteiro de volta da identificação. Felizmente, a classificação tem um argumento -g que os analisará.

Nos mesmos arquivos aqui, esta versão (não forking out para Perl) leva apenas 60% do tempo que a versão Perl faz. Isso não quer dizer que Perl é lento, mas entrar em perl e subshell back out é uma complicação desnecessária que está atrasando as coisas (eu acho).

O meu ainda não é o ideal. Precisando analisar os números de volta para números inteiros para classificação é bastante lento. Idealmente, você faria isso tudo internamente em um idioma em que o tamanho permanecesse como um inteiro por toda parte ... Mas o que precede é o mais curto e mais aguçado que eu posso fazer.

    
por Oli 08.07.2014 / 17:28
1

Usando find , file --mime-type , identify , awk e sort

Usando file --mime-type , encontramos todas as imagens , mesmo sem uma extensão.

A linha única no final desta resposta tem um problema com as novas linhas no nome do arquivo. Portanto, aqui uma outra versão:

find . -type f -exec sh -c 'file --brief --mime-type "$0" |\
grep -q ^image/ && identify -format "%[fx:w*h] %i\n" "$0"' {} \; |\
sort -g

Exemplo de saída

26696 ./OWoHp.png
37975 ./hUXnc.png
47275 ./foo
bar.png

Este é o arquivo com a nova linha no nome do arquivo:

47275 ./foo
bar.png

Muito obrigado @terdon , @ don_crissti e @glennjackman para as respostas aqui .

Versão antiga com um problema se o nome do arquivo contiver novas linhas

find . -type f -print0 | \
    xargs -0 -I{} file --mime-type {} | \
    awk -F$"
9216 ./.face
27918 ./Unbenannt.png
1.0368e+06 ./Images/Wallpapers/14-13.jpg
1.57292e+07 ./Images/Wallpapers/wallpaper_19.jpg
1.57292e+07 ./Images/Wallpapers/wallpaper_22.jpg
1.92e+06 ./Images/Wallpapers/black (10).jpg
2.304e+06 ./Images/Wallpapers/1920x1200.jpg
2.304e+06 ./Images/Wallpapers/1920x1200_Seria_Lunar-Melodies.png
2.304e+06 ./Images/Wallpapers/Anime_girl_129177.jpg
2.304e+06 ./Images/Wallpapers/wallpaper-1802661.jpg
2.304e+06 ./Images/Wallpapers/wallpaper-264390.jpg
3.14368e+06 ./Images/Wallpapers/14 - 2.jpg
3.6864e+06 ./Images/Wallpapers/14-1.jpg
4.096e+06 ./Images/Wallpapers/wallpaper-2850337.jpg
4.096e+06 ./Images/Wallpapers/wt4NRqA.jpg
7.0969e+06 ./Images/Wallpapers/14 - 1.png
" -F": " '/image/ {print $1}' | \ xargs -I{} identify -format "%[fx:w*h] %i\n" {} | \ sort -g

Exemplo de saída

find . -type f -exec sh -c 'file --brief --mime-type "$0" |\
grep -q ^image/ && identify -format "%[fx:w*h] %i\n" "$0"' {} \; |\
sort -g
    
por A.B. 27.06.2015 / 17:33
0

Geeqie pode ordenar por tamanho de imagem.

sudo apt install geeqie
    
por 25.06.2018 / 12:04
0

Mais tarde, mas aqui está minha versão com find , exiftool e sort :

find . -exec exiftool -S -t -q -FileName -ImageSize {} + | sort -k2n,2

É um pouco lento, mas funciona. Exemplo de saída:

$ find Downloads -exec exiftool -S -t -q -FileName -ImageSize  {} + | sort -k2n,2 

1433695350670.jpg   1600x1000
1433695350670.jpg   1600x1000
1434999385912.jpg   2212x3318
1434999385912.jpg   2212x3318
1433524966694.jpg   2688x1520
1433524966694.jpg   2688x1520
1433525301504.jpg   2688x1520
1433525301504.jpg   2688x1520
    
por Sergiy Kolodyazhnyy 28.06.2015 / 18:38