![按图像分辨率(尺寸)排序](https://linux22.com/image/857668/%E6%8C%89%E5%9B%BE%E5%83%8F%E5%88%86%E8%BE%A8%E7%8E%87%EF%BC%88%E5%B0%BA%E5%AF%B8%EF%BC%89%E6%8E%92%E5%BA%8F.png)
哪个程序具有按像素大小/分辨率/尺寸对图像进行排序的功能。
很奇怪但是即使如此强大的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
使用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
答案4
盖奇可以按图像大小排序。
sudo apt install geeqie