查找目录中所有图像的最小高度和最小宽度

查找目录中所有图像的最小高度和最小宽度

假设我有大约 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)

如何使用

  1. 将脚本复制到一个空文件中,另存为get_minsize.py
  2. 使用图像目录作为参数来运行它:

    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反转排序,输出最高的宽度或高度,删除它以获取最低的。

相关内容