Come verificare che le dimensioni dell'immagine siano ok o meno


1

Sto avendo molti file di immagine in una cartella. Principalmente ci sono jpg, ma anche alcuni png, bmp, gif, tif (ma il jpg è molto importante se altri non sono possibili). Esistono anche molti file XML nella stessa cartella con gli stessi nomi dei file immagine. Quindi c'è qualcosa del genere: 1.jpg, 1.xml, a.png, a.xml, 3g.bmp, 3g.xml ...

Tutti i file xml hanno solo 1 riga: <IMGRES WIDTH="1234" HEIGHT="567" />(ovviamente i numeri non sono uguali).

Sto cercando un modo semplice per controllare tutte le dimensioni delle immagini e confermare se sono uguali a quelle in xml o meno. Quindi voglio un output come:

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

Questo è possibile solo in Windows senza nessun altro software installato?


Lo scripting non è un punto di forza di Windows, risolvere un compito come questo sarebbe un gioco da ragazzi in Linux.
Stefan Seidel,

Risposte:


0

Anziché confrontarli, scriverei uno script per ricreare i file XML dall'output di uno strumento come ImageMagickidentify

Comincerei con qualcosa del genere

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

Quindi correggere la gestione dell'estensione del nome file ecc.


Per fare un confronto come chiedi, userei un linguaggio di scripting migliore (Perl nel mio caso, ma mi aspetto che molte altre persone utilizzino il PowerShell incorporato)

È possibile utilizzare il codice sopra ma scrivere l'output su un nome file fisso e quindi utilizzare fce ifnel ciclo for per generare l'output desiderato.


Per fare ciò che chiedi usando solo strumenti integrati, guarderei PowerShell.

Ecco un esempio da powershellcommunity.org che potresti usare come punto di partenza.

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 
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.