web-dev-qa-db-fra.com

Trouvez la hauteur et la largeur les plus basses parmi toutes les images d'un répertoire

Comment puis-je obtenir la hauteur la plus basse de toutes les hauteurs et aussi la largeur la plus basse de toutes les largeurs étant donné que j'ai environ 50 000 images?

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

Cette commande ne donne que w et h d'une image.

Je l'ai obtenu de IRC canal Linux mais parce que j'ai 50k images, cela prend une éternité pour produire des résultats:

[jalal@goku images]$ find -type f -name \*.jpg -exec identify -format '%w %h %d/%f\n' {} \; | sort -n -k2
2
Mona Jalal

Obtenir l'image avec une hauteur et une largeur minimales

Je n'ai pas de statistiques comparatives, mais j'ai des raisons de croire que le script ci-dessous offre une option relativement bonne, car:

  • pIL de python ne charge pas l'image en mémoire lors de l'appel de .open
  • Le script lui-même ne stocke pas la liste de tous les fichiers, il recherche simplement par fichier si le suivant a une hauteur ou une largeur plus petite.

Le script

#!/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)

Comment utiliser

  1. Copiez le script dans un fichier vide, enregistrez-le sous get_minsize.py
  2. Exécutez-le avec le répertoire d'images comme argument:

    python3 /path/to/get_maxsize.py /path/to/imagefolder
    

Sortie comme:

minwidth (520, '/home/jacob/Desktop/caravan/IMG_20171007_104917.jpg')
minheight (674, '/home/jacob/Desktop/caravan/butsen1.jpg')

NB

Le script suppose que le dossier d'images est un répertoire "plat" avec (uniquement) des images. Si ce n'est pas le cas, quelques lignes doivent être ajoutées, il suffit de le mentionner.

3
Jacob Vlijm