按图像分辨率(尺寸)排序

按图像分辨率(尺寸)排序

哪个程序具有按像素大小/分辨率/尺寸对图像进行排序的功能。

很奇怪但是即使如此强大的DigiKam却没有如此简单的功能。

有什么建议么?

答案1

我不知道它的性能如何,但 ImageMagick 有一个identify应用程序,我必须在过去十分钟内学习它。最棒的是,它有一个-format可以进行数学运算的参数!

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

不幸的是,如果超过一定大小,您将得到科学计数法(例如 1.2*10^3),而不是从identify返回的整数。幸运的是,sort有一个-g参数可以解析它们。

对于此处的相同文件,此版本(不分叉到 Perl)仅花费 Perl 版本所需时间的 60%。这并不是说 Perl 很慢,而是进入 perl 并退出子 shell 是一种不必要的复杂操作,会减慢速度(我认为)。

我的方法仍然不够理想。需要将数字解析回整数进行排序,速度相当慢。理想情况下,你应该用一种语言在内部完成这一切,其中大小始终保持为整数……但以上是我能做的最短、最清晰的一行代码。

答案2

如果您正在寻找命令行工具,以下命令将对图像文件进行排序,按分辨率排序:

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

答案3

使用findfile --mime-type、和identifyawksort

利用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

答案4

盖奇可以按图像大小排序。

sudo apt install geeqie

相关内容