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

5

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

Solução com ExifTool

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

Atualizar
Por conveniência, eu modifiquei um pouco o nome do arquivo inline 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 também possa processar subpastas.

Solução com o ImageMagick

Coloquei abaixo da minha solução com o ImageMagick, é bastante rápido e simples, mas ofc requer a biblioteca instalada.

    
por Gruber 08.06.2015 / 04:52

3 respostas

6

Usando ExifTool (executável portátil renomeado para exiftool.exe ):

exiftool -ImageSize -r .

Aqui ImageSize é o nome da tag em que você está interessado e imprimirá Largura da imagem x Altura da imagem . A opção -r faz com que processe recursivamente arquivos em subdiretórios.

O formato de string de saída personalizado também é simples. 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 acrescentar > Details.txt a eles.

Se você deseja simplesmente executar o programa e fazer com que ele grave um arquivo de texto com os detalhes relevantes da imagem, você pode renomeie o executável da seguinte forma:

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

Isso gravará toda a saída do console ( -w ) em um arquivo chamado Details.txt no diretório atual. Nesse caso, a saída consistirá dos nomes e tamanhos das imagens de todos os GIFs no diretório atual. Mais detalhes sobre o parâmetro -w , incluindo o significado de + , ! e %0f estão disponíveis no link da documentação acima.

Você pode incluir mais extensões para serem processadas usando -ext jpg -ext png e assim por diante, ou excluir -ext gif para fazer com que ele leia todos os tipos de arquivos suportados (incluindo imagens que você talvez não queira ).

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

-r pode, claro, ser adicionado para ativar o processamento recursivo.

lotes mais que você pode fazer com o programa, considerando o quão ridiculamente poderoso ele é (e extensível também, dado que a fonte completa do Perl está disponível gratuitamente)!

    
por 08.06.2015 / 06:10
1

Ok, solução com ImageMagick , simples e rápida (mas ofc requer a biblioteca).

Abra a linha cmd na pasta que você está interessada ( Shift + Clique com o botão direito dentro da janela da pasta e selecione "Abrir janela de comando aqui"), depois no prompt cmd use isso

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

Solicita que %f filename , %w width e %h height formatem como "WIDTHxHEIGHT"

Mais informações aqui link

    
por 08.06.2015 / 05:44
1

Existe um script do PowerShell abaixo que deve fazê-lo; basta alterar os diretórios para lista e saída. Eu 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
    
por 08.06.2015 / 05:23