Сортировать по разрешению изображения (размеры)

Какая программа имеет функцию сортировки изображений по размеру / разрешению / размерам в пикселях.

Очень странный, но даже такой мощный DigiKam не имеет такой простой функции.

Есть предложения?

7
задан 25 June 2018 в 12:18

6 ответов

При поиске инструмента командной строки следующая команда отсортирует файлы изображений, где самое высокое разрешение на первом месте:

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)}<>'

Я в основном сортирую использование файлов perl подпрограмма подпрограммы вида, где ключ здесь должен звонить identify команда и оценка ее отформатированный вывод.

identify доступно с imagemagick пакет:

sudo apt-get install imagemagick

ОБНОВЛЕНИЕ:

Следующая команда также произведет разрешение:

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))}<>'

Пример:

./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
6
ответ дан 25 June 2018 в 12:18

Используя find, file --mime-type, identify, awk и sort

Используя file --mime-type мы находим все изображения, даже без расширения.

Короткое в конце этого ответа имеет проблему с новыми строками в имени файла. Поэтому здесь другая версия:

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

Демонстрационный вывод

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

Это - файл с новой строкой в имени файла:

47275 ./foo
bar.png

Большое спасибо @terdon, @don_crissti и @glennjackman для ответов здесь.


Старая версия с проблемой, если имя файла содержит новые строки

find . -type f -print0 | \
    xargs -0 -I{} file --mime-type {} | \
    awk -F$"\0" -F": " '/image/ {print $1}' | \
    xargs -I{} identify -format "%[fx:w*h] %i\n" {} | \
    sort -g

Демонстрационный вывод

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
2
ответ дан 25 June 2018 в 12:18

Поздно стороне, но вот моя версия с find, exiftool, и sort:

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

Это немного медленно, но работы. Демонстрационный вывод:

$ 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
1
ответ дан 25 June 2018 в 12:18

Я понятия не имею, как это работает, но ImageMagick имеет identify приложение, которое я должен изучить за прошлые десять минут. Лучше, чем что-нибудь, это имеет -format аргумент, где можно сделать математику!

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

, К сожалению, если Вы добираетесь выше определенного размера, Вы получаете экспоненциальное представление (например, 1.2*10^3) вместо целого числа назад от определяют. К счастью вид имеет -g аргумент, который проанализирует их.

На тех же файлах здесь, эта версия (не раскошеливающийся к Perl) только берет 60% времени, которое делает версия Perl. Но это вовсе не значит Perl является медленным, но вход в жемчуг и подокружение отступают, ненужная сложность, это замедляет вещи (я думаю).

Мой все еще не идеален. Быть необходимостью для парсинга чисел назад к целым числам для сортировки является довольно медленной. Идеально Вы сделали бы это все внутренне на одном языке, где размер остается как целое число повсюду... Но вышеупомянутое является самой короткой, самой резкой остротой, которую я могу сделать.

7
ответ дан 25 June 2018 в 12:18

Работы ответа Oli. Вот модификация для списка минимума ширины и высоты

find * -type f -exec identify -format "%[fx:w>h?h:w] %i\n" {} \+ | sort -g
0
ответ дан 7 October 2019 в 13:40

Geeqie может отсортировать по размеру изображения.

sudo apt install geeqie
1
ответ дан 23 November 2019 в 06:14

Другие вопросы по тегам:

Похожие вопросы: