Какая программа имеет функцию сортировки изображений по размеру / разрешению / размерам в пикселях.
Очень странный, но даже такой мощный DigiKam не имеет такой простой функции.
Есть предложения?
При поиске инструмента командной строки следующая команда отсортирует файлы изображений, где самое высокое разрешение на первом месте:
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
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
Поздно стороне, но вот моя версия с 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
Я понятия не имею, как это работает, но 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 является медленным, но вход в жемчуг и подокружение отступают, ненужная сложность, это замедляет вещи (я думаю).
Мой все еще не идеален. Быть необходимостью для парсинга чисел назад к целым числам для сортировки является довольно медленной. Идеально Вы сделали бы это все внутренне на одном языке, где размер остается как целое число повсюду... Но вышеупомянутое является самой короткой, самой резкой остротой, которую я могу сделать.
Работы ответа Oli. Вот модификация для списка минимума ширины и высоты
find * -type f -exec identify -format "%[fx:w>h?h:w] %i\n" {} \+ | sort -g
Geeqie может отсортировать по размеру изображения.
sudo apt install geeqie