Rejeitar automaticamente imagens enviadas para uma pasta que não atenda a determinados critérios de resolução / tamanho?

0

Recebo um grande número de imagens enviadas por várias pessoas da nossa empresa. Em vez de percorrer todos eles manualmente, existe uma maneira de ter imagens que não tenham pelo menos 300 dpi e 1800 px de altura / largura "rejeitadas" em uma pasta separada?

    
por Seanaber 10.07.2015 / 17:03

2 respostas

2

Não há nada padrão para fazer isso com. Você precisa de algum tipo de script que seja executado periodicamente nas pastas e mova os arquivos que não atendem aos critérios para uma pasta "rejeitada".
Mais fácil é provavelmente escrever algo com ImageMagick .
Este é um conjunto de utilitários de linha de comando (gratuitos) para conversão de imagem e / ou manipulação. Há comandos para consultar o tamanho / resolução e o departamento de cores das imagens em muitos formatos de imagem diferentes. O comando "identificar" do ImageMagick provavelmente será mais útil.

Por exemplo:

$ identify rose.jpg
rose.jpg JPEG 640x480 sRGB 87kb 0.050u 0:01
    
por 10.07.2015 / 17:16
0

Dica:
O ExifTool está disponível para Windows e, felizmente, moverá ou copiará arquivos com base nos metadados.

Para o que vale: "DPI" só é válido em relação às imagens IMPRESSAS ou DIGITALIZADAS. Os valores de metadados rotulados como "DPI" podem ser alterados pelo uso do Exiftool - e não tem relevância alguma para exibir arquivos em um computador, nem a "qualidade" da imagem disponível.

OBSERVAÇÃO: Muitas câmeras point and shoot mais antigas e provavelmente também mais recentes têm 72 DPI como padrão, que não podem ser alterados na câmera

O fato de que, e. Photoshop exibe imagens em um tamanho dependente deste valor é apenas "bull" - um lapso de mente dos desenvolvedores. Tudo o que você precisa fazer é gravar uma "Ação" que defina os valores de DPI para 300 ou mais ( Resize image ) - ela é executada em uma fração de segundo e mantém a imagem "como está"; apenas certifique-se de desmarcar [v] Resample image . A partir de então, o PS irá pular o "bull" para um nível razoável.

Exemplo: crie um arquivo sortimages.bat com essa única linha nele.
@exiftool  -jfif:Xresolution=300 -jfif:Yresolution=300 -r -d ..\SortedPictures\%Y\%Y-%m-%d_%%f.%%e "-filename<createdate" %1

Certifique-se de salvá-lo em um diretório que esteja presente na variável PATH. Ou adicione por exemplo ;C:\cmd-utils\ para o final do PATH, crie o dir, coloque o arquivo bat no diretório.
Faça o download do Exiftool.exe e coloque-o no mesmo diretório.
Como você começou cmd.exe rodando o arquivo bat será apenas um simples sortimages .

A partir de então, cd /d DIR_WHERE_YOUR_IMAGES_LIVE
seguido por sortimages *.*
vai;

a) redefine os metadados de resolução para 300 DPI para todas as imagens, e b) copie as imagens para uma pasta chamada SortedPictures - uma etapa em a dir-tree (= dir pai, para evitar confrontos com o trabalho atual).

Cada imagem será colocada em uma subpasta por ano e terá um nome de arquivo que reflete a data e a hora em que foi tirada.

Um pequeno aviso: isso não é infalível, por exemplo imagens que não tenham uma data de criação nos metadados não serão colocadas no novo diretório; eles terão os valores de resolução redefinidos e serão copiados para o nome do arquivo original, e o arquivo original permanecerá no lugar com um "original" adicional adicionado ao nome.

Mais para ler:
link
Eu quero alterar o DPI com o ImageMagick sem alterar o tamanho real dos bytes dos dados da imagem

Exiftool - link

Agora, o rejeitar o tamanho pode ser um desafio para os usuários cmd.exe (não vejo solução fácil).
Eu não tenho idéia de como o PowerShell lida com a situação - eu espero que seja "bom", embora:

exiftool -p '$Filename - $ImageSize' *.*
imprimirá nomes de arquivo e tamanhos de imagem em uma tabela simples.

Aqui está um extra; Eu não sou versado com cmd.exe nem Powershell da mesma maneira, desculpe.

Autorrefecção, no linux ou www.cygwin.com usando o bash shell

Uma execução de linha única ... (certifique-se de que ; NÃO tenha espaços à esquerda)

exiftool  -p '$Filename $ImageWidth $ImageHeight' *.jpg  | ( while read f w h; do if [ "$w" -gt "$h" ]; then t="$h"; h="$w"; w="$t"; fi; echo "$f $h"; if [ "$h" -lt "1800" ]; then mv "$f" "REJECTED_$f"; fi; done )

ou como um script curto²:

#!/bin/bash

exiftool  -p '$Filename $ImageWidth $ImageHeight' *.jpg  \
| ( 
  while read f w h; do
    if [ "$w" -gt "$h" ]; then
      t="$h"
      h="$w"
      w="$t"
    fi
    echo "$f $h"
    if [ "$h" -lt "1800" ]; then
      mv "$f" "REJECTED_$f"
    fi
  done )

² Para criá-lo; pegue notepad ou nano e digite-o, salve como um arquivo. Do chmod 755 filename e vai se comportar como qualquer executável.

    
por 10.07.2015 / 17:20