假设我有大约 50k 张图像,如何才能找出所有高度中的最低高度以及所有宽度中的最低宽度?
我尝试了这个命令,但它只给出了图像的宽度和高度:
identify -format '%w %h' 72028059_11.jpg
600 431
我也从 IRC Linux 频道获得了这个,但是,因为我有 50k 张图像,所以需要很长时间才能输出任何结果:
find -type f -name \*.jpg -exec identify -format '%w %h %d/%f\n' {} \; | sort -n -k2
答案1
获取具有最小高度和宽度的图像
我没有任何比较统计数据,但我有理由相信下面的脚本提供了一个相对较好的选择,因为:
- python 的 PIL不将图像加载到内存中当调用
.open
- 脚本本身并不存储所有文件的列表,它只是查找每个文件的下一个文件是否具有较小的高度或宽度。
剧本
#!/usr/bin/env python3
from PIL import Image
import os
import sys
path = sys.argv[1]
# set an initial value which no image will meet
minw = 10000000
minh = 10000000
for image in os.listdir(path):
# get the image height & width
image_location = os.path.join(path, image)
im = Image.open(image_location)
data = im.size
# if the width is lower than the last image, we have a new "winner"
w = data[0]
if w < minw:
newminw = w, image_location
minw = w
# if the height is lower than the last image, we have a new "winner"
h = data[1]
if h < minh:
newminh = h, image_location
minh = h
# finally, print the values and corresponding files
print("minwidth", newminw)
print("minheight", newminh)
如何使用
- 将脚本复制到一个空文件中,另存为
get_minsize.py
使用图像目录作为参数来运行它:
python3 /path/to/get_maxsize.py /path/to/imagefolder
输出如下:
minwidth (520, '/home/jacob/Desktop/caravan/IMG_20171007_104917.jpg')
minheight (674, '/home/jacob/Desktop/caravan/butsen1.jpg')
注意:
脚本假定图像文件夹是一个仅包含图像的“平面”目录。如果不是这样,则需要添加几行,只需提及即可。
答案2
这对我有用:
$ find -type f -name \*.jpg -exec identify -format '%w %h %d/%f\n' {} + | sort -n -k1 > sorted_width
$ sort -k 1rn sorted_width
$ find -type f -name \*.jpg -exec identify -format '%w %h %d/%f\n' {} + | sort -n -k2 > sorted_height
$ sort -k 2rn sorted_height
答案3
从:https://unix.stackexchange.com/a/155627/343966
您可以使用以下命令来使用 ImageMagic 包:
identify -format "%w %h %f\n" *.png | sort -n -r -k 1 | head -n 3
-k 1
按宽度排序,改为-k 2
按高度排序。-r
反转排序,输出最高的宽度或高度,删除它以获取最低的。