Как получить наименьшую высоту из всех высот, а также наименьшую ширину из всей ширины, если у меня около 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
У меня нет статистики сравнения, но у меня есть причины полагать, что сценарий ниже предлагает относительно хороший вариант с тех пор:
.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')
Сценарий предполагает, что папка изображения является "плоским" каталогом (только) с изображениями. Если это не так несколько строк должны быть добавлены, просто упомянуть.
Это сработало для меня:
$ 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