Como verificar se os tamanhos das imagens estão ok ou não

1

Estou tendo muitos arquivos de imagem em uma pasta. Principalmente existem jpg, mas alguns png, bmp, gif, tif também (mas jpg é mais importante se outros não forem possíveis). Há também muitos arquivos xml na mesma pasta com os mesmos nomes que os arquivos de imagem estão tendo. Portanto, há algo assim: 1.jpg, 1.xml, a.png, a.xml, 3g.bmp, 3g.xml ...

Todos os arquivos xml estão tendo apenas uma linha: <IMGRES WIDTH="1234" HEIGHT="567" /> (obviamente, os números não são iguais).

Estou procurando uma maneira fácil de verificar todos os tamanhos de imagem e confirmar se eles são iguais aos do xml ou não. Então eu quero saída como:

imagename, xmlwidth x xmlheight, realwidth x realheight, match/error

Isso é possível somente no Windows sem outro software instalado?

    
por Goran 18.09.2012 / 06:29

1 resposta

0

Em vez de compará-los, eu escreveria um script para recriar os arquivos XML a partir da saída de uma ferramenta como o ImageMagick's identify

Eu começaria com algo como

 for %f in (*.*) do ^
    identify -format '<IMGRES WIDTH="%w" HEIGHT="%h" />' %f% > %f%.xml

Em seguida, corrija o tratamento da extensão do nome de arquivo, etc, etc.

Para fazer uma comparação como você pergunta, eu usaria uma linguagem de script melhor (Perl no meu caso, mas eu espero que muitas outras pessoas usem o powershell embutido)

Você pode usar o código acima, mas gravar a saída em um nome de arquivo fixo e, em seguida, usar fc e if no loop for para gerar a saída desejada.

Para fazer o que você pede usando apenas ferramentas internas, eu vejo o powershell.

Aqui está um exemplo de da powershellcommunity.org que você pode usar como um ponto de partida.

function _Get-ImageStream 
{ 
param ($File) 

$image = [System.Drawing.Image]::FromFile($File) 
$imageStream = New-Object System.IO.MemoryStream 
$image.Save($imageStream, [System.Drawing.Imaging.ImageFormat]::Jpeg) 

return $imageStream 
} 

[System.Reflection.Assembly]::LoadFile( "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll") 

"Name|SizeInBytes|Width|Height" >> C:\JPGInfo.txt 

$path = "C:\Images\" 
$imageFiles = Get-ChildItem -Recurse $path -Include *.jpg 

foreach ($image in $imageFiles) 
{ 
$name = $image.Name 
$length = $image.Length 
$imageStream = _Get-ImageStream -File $image.FullName 
$width = $imagestream.Width 
$height = $imageStream.Height 

"$name|$length|$width|$height" >> C:\JPGInfo.txt 
}
    
por 18.09.2012 / 11:37