encontra a menor altura e a menor largura entre todas as imagens em um diretório

2

Como posso obter a menor altura de todas as alturas e também a menor largura de toda a largura, pois tenho cerca de 50 mil imagens?

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

Este comando só dá w e h de uma imagem.

Eu obtive isso do canal IRC Linux, mas como tenho 50k imagens, demora para sempre gerar resultados:

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

2 respostas

2

Obtendo a imagem com altura e largura mínima

Não tenho estatísticas de comparação, mas tenho motivos para acreditar que o script abaixo oferece uma opção relativamente boa, pois:

  • O PIL do python não carrega a imagem na memória ao chamar .open
  • O script em si não armazena a lista de todos os arquivos, ele simplesmente procura por arquivo se o próximo tiver uma altura ou largura menor.

O 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)

Como usar

  1. Copie o script em um arquivo vazio, salve-o como get_minsize.py
  2. Execute-o com o diretório de imagens como argumento:

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

Saída como:

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

NB

O script assume que a pasta de imagens é um diretório "plano" com (apenas) imagens. Se esse não for o caso, algumas linhas precisam ser adicionadas, apenas mencione.

    
por Jacob Vlijm 20.11.2017 / 21:34
-1

Isso funcionou para mim:

$ 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
    
por Mona Jalal 20.11.2017 / 22:55