Script para obter imagens em pasta com dimensões impressas em um arquivo .txt

Script para obter imagens em pasta com dimensões impressas em um arquivo .txt

Conforme o título, existe um script para o Win 7 imprimir em um arquivo .txt todas as imagens (JPG, PNG, GIF ecc) dentro de uma pasta junto com "nome do arquivo" e "dimensão de pixels"?
Eu tentei dirna linha de comando, mas lista apenas o nome, tamanho do arquivo etc.


Solução com ExifTool

O melhor negócio, com o comando já codificado no nome do arquivo .exe é totalmente um script de arrastar e soltar para usar onde você quiser!

Atualizar
Por conveniência, modifiquei ligeiramente o nome do arquivo embutido do exe para este

ExifTool(-FileName -Imagesize -r -T -w+! %0finfo.txt -ext jpg --ext exe .).exe

Dessa forma reduzi ao mínimo a saída .txt para uma única linha por imagem ( -T) e adicionei uma opção recursiva ( -r) para que ele também possa processar subpastas.


Solução com ImageMagick

Coloquei abaixo minha solução com ImageMagick, é bem rápida e simples, mas requer a biblioteca instalada.

Responder1

UsandoFerramenta Exif(executável portátil renomeado paraexiftool.exe):

exiftool -ImageSize -r .

AquiTamanho da imagemé o nome da tag em que você está interessado e será impressoLargura da imagem x Altura da imagem. A -ropção faz com que ele processe arquivos recursivamente em subdiretórios.

Personalizadoformato de string de saídaé simples também. Por exemplo:

exiftool -p "Image Name: \"$FileName\"$/Image Size: $ImageSize$/" -r .

Neste caso os nomes das tags são precedidos por $. $/imprime uma nova linha.

Nota: Os comandos acima devem ser digitados no prompt de comando. Para redirecionar a saída para um arquivo de texto, você pode anexar > Details.txta eles.


Se você quiser simplesmente executar o programa e escrever um arquivo de texto com os detalhes relevantes da imagem, você poderenomeie o executáveldo seguinte modo:

ExifTool(-FileName -Imagesize -w+! %0fDetails.txt -ext gif --ext exe .).exe

Isto irá gravar toda a saída do console ( -w) em um arquivo chamadoDetalhes.txtno diretório atual. Neste caso, a saída consistirá nos nomes e tamanhos das imagens de todos os GIFs no diretório atual. Mais detalhes sobre o -wparâmetro, incluindo o significado de +, !estão %0fdisponíveis no link da documentação acima.

Você podeincluirmais extensões a serem processadas -ext jpg -ext pnge assim por diante, ou exclua -ext gifcompletamente para que ele leia todos os tipos de arquivos suportados (incluindo não-imagens que você pode não querer).

--ext exeé usado paraexcluirtodos os EXEs (para que o próprio executável do programa não seja incluído no relatório).

-ré claro que pode ser adicionado para permitir o processamento recursivo.

grande quantidademais você pode fazer com o programa, dado o quão ridiculamente poderoso ele é (e extensível também, visto que o código-fonte Perl completo está disponível gratuitamente)!

Responder2

Ok solução comImagemMagick, simples e rápido (mas ofc requer a biblioteca).

Abra a linha cmd na pasta de seu interesse ( Shift+ RightClickdentro da janela da pasta e selecione "Abrir janela de comando aqui") e, no prompt do cmd, use isto

identify -format "%f %wx%h\r" *.jpg > info.txt

Solicita %f filenamee formatado %w widthcomo %h height"WIDTHxHEIGHT"

Mais informações aquihttp://www.imagemagick.org/script/escape.php

Responder3

Há umScript do PowerShellabaixo disso deve bastar; basta alterar os diretórios de lista e saída. Testei no Windows 8.1 e no Windows PowerShellISE.

param( $folder = "E:\My Pictures", $outputFile = "E:\details.txt" )
$objShell = New-Object -ComObject Shell.Application
$fileList = @()
$attrList = @{}
$details = ( "Dimensions" )
$objFolder = $objShell.namespace($folder)
for ($attr = 0 ; $attr  -le 500; $attr++)
{
    $attrName = $objFolder.getDetailsOf($objFolder.items, $attr)
    if ( $attrName -and ( -not $attrList.Contains($attrName) ))
    {
        $attrList.add( $attrName, $attr )
    }
}
dir $folder -Recurse -Directory | ForEach-Object{
    $objFolder = $objShell.namespace($_.FullName)
    foreach($file in $objFolder.items())
    {
        foreach( $attr in $details)
        {
            $attrValue = $objFolder.getDetailsOf($file, $attrList[$attr])
            if ( $attrValue )
            {
                Add-Member -InputObject $file -MemberType NoteProperty -Name $("A_" + $attr) -value $attrValue
            }
        }
        $fileList += $file
        $fileList.Count
    }
}
$fileList | Export-Csv $outputFile -Delimiter ','
$fileList | Format-Table

informação relacionada