Como posso procurar fotos por altura ou largura?

4

Eu gostaria de pesquisar por fotos com proporção de 4: 3 e copiá-las para um flash drive para uso em um quadro digital. Eu sei como fazer isso no Windows com height:3000 (por exemplo) no shell gráfico. Como posso fazer o mesmo no Nautilus ou com a linha de comando?

    
por Joel DeWitt 27.10.2015 / 03:07

2 respostas

2

você pode usar script de shell simples para isso. crie qualquer arquivo search.sh em sua pasta de fotos usando

gedit search.sh

e cole as linhas abaixo:

#!/bin/bash

mkdir  /home/$USER/test
for i in *.jpg; do
read -r w h <<<$(identify -format "%w %h" "$i")
if [ 'expr $h / $w' ==  'expr 4 / 3' ]; then
cp "$i" /home/$USER/test/
fi
done

salve este arquivo usando Ctrl + s e torne-o executável usando

sudo chmod +x search.sh

execute-o usando o comando

./search.sh

copiará todas as fotos que tiverem o diretório 4:3 to test em seu diretório pessoal. Se você quiser copiar para flash drive ou em outro lugar, faça a mudança no script e se o comando identify não estiver disponível no seu sistema, então você pode instalar o comando:

sudo apt-get install imagemagick
    
por pl_rock 27.10.2015 / 16:23
1

Extraindo imagens de um diretório recursivo

O script abaixo copia imagens de uma proporção 4: 3, de um diretório de origem recursivamente para um diretório de destino. O script lê todos os formatos comuns de imagem, os arquivos que não são imagens são ignorados (aumentando em IOError )

#!/usr/bin/env python3
import os
import shutil
from PIL import Image
import sys

dr = sys.argv[1]; target = sys.argv[2]

for root, dirs, files in os.walk(dr):
    for f in files:
        try:
            file = root+"/"+f
            img = Image.open(file); size = img.size; ratio = size[0]/size[1]
            if ratio == 4/3:
                shutil.copyfile(file, target+"/"+f)
        except (IOError, ValueError):
            pass

Como usar

  • Copie o script em um arquivo vazio, salve-o como search_ratio.py
  • Execute-o pelo comando:

    python3 /path/to/search_ratio.py /source/directory /target/directory
    

Se um ou mais diretórios incluírem espaços, use aspas.
Um exemplo de comando que usei para teste:

python3 '/home/jacob/Bureaublad/pscript_4.py' '/home/jacob/Bureaublad' '/home/jacob/Afbeeldingen/test'

Caso você esteja extraindo imagens de um diretório "simples" (único)

Então o script pode ser um pouco mais simples:

#!/usr/bin/env python3
import os
import shutil
from PIL import Image
import sys

dr = sys.argv[1]; target = sys.argv[2]

for f in os.listdir(dr):
    try:
        file = dr+"/"+f
        img = Image.open(file); size = img.size; ratio = size[0]/size[1]
        if ratio == 4/3:
            shutil.copyfile(file, target+"/"+f)
    except (IOError, ValueError):
        pass

Use exatamente como o primeiro.

Observe que, com o primeiro script, você receberá conflitos de nome no caso de nomes duplicados em pastas de origem diferentes.

    
por Jacob Vlijm 27.10.2015 / 17:19