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

Bar*_*tek 8 command-line software-recommendation display-resolution

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

很奇怪,但即使如此强大的 DigiKam 也没有这么简单的功能。

有什么建议?

Oli*_*Oli 8

我不知道这是如何执行的,但 ImageMagick 有一个identify应用程序,我必须在过去十分钟内学习。比什么都好,它有一个-format你可以做数学的论点!

find -iname '*.jpg' -exec identify -format "%[fx:w*h] %i\n" {} \+ | sort -g
Run Code Online (Sandbox Code Playgroud)

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

在此处的相同文件中,此版本(不分叉到 Perl)仅占用 Perl 版本的 60% 的时间。这并不是说 Perl 很慢,但进入 perl 并退出是不必要的复杂化,它会减慢速度(我认为)。

我的还是不理想。需要将数字解析回整数进行排序相当慢。理想情况下,您会在一种语言中在内部执行所有这些操作,其中大小始终保持为整数……但以上是我能做的最短、最清晰的单行。


Syl*_*eau 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)}<>'
Run Code Online (Sandbox Code Playgroud)

我基本上是使用perl sort子子程序对文件进行排序,这里的关键是调用identify命令并评估其格式化输出。

identifyimagemagick包提供:

sudo apt-get install imagemagick
Run Code Online (Sandbox Code Playgroud)

更新

以下命令还将输出分辨率:

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))}<>'
Run Code Online (Sandbox Code Playgroud)

例子:

./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
Run Code Online (Sandbox Code Playgroud)