Найдите самую низкую высоту и самую низкую ширину среди всех изображений в каталоге

Как получить наименьшую высоту из всех высот, а также наименьшую ширину из всей ширины, если у меня около 50 тыс. Изображений?

[jalal@goku images]$  identify -format '%w %h' 72028059_11.jpg
600 431

Эта команда дает только w и h изображения.

Я получил это по каналу IRC Linux, но из-за того, что у меня есть изображения с разрешением 50 тыс., Для вывода каких-либо результатов требуется вечность:

[jalal@goku images]$ find -type f -name \*.jpg -exec identify -format '%w %h %d/%f\n' {} \; | sort -n -k2
2
задан 24 May 2019 в 11:01

2 ответа

Получение изображения с минимальной высотой и шириной

У меня нет статистики сравнения, но у меня есть причины полагать, что сценарий ниже предлагает относительно хороший вариант с тех пор:

  • PIL Python не загружает изображение в память при вызове .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')

NB

Сценарий предполагает, что папка изображения является "плоским" каталогом (только) с изображениями. Если это не так несколько строк должны быть добавлены, просто упомянуть.

3
ответ дан 24 May 2019 в 11:01

Это сработало для меня:

$ 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
-1
ответ дан 24 May 2019 в 11:01

Другие вопросы по тегам:

Похожие вопросы: