1

У меня много файлов изображений в одной папке. В основном это jpg, но есть и некоторые png, bmp, gif, tif (но jpg наиболее важен, если другие невозможны). В той же папке много файлов XML с такими же именами, что и у файлов изображений. Итак, есть что-то вроде этого: 1.jpg, 1.xml, a.png, a.xml, 3g.bmp, 3g.xml ...

Все XML-файлы имеют только одну строку: <IMGRES WIDTH="1234" HEIGHT="567" /> (конечно, номера не совпадают).

Я ищу простой способ проверить все размеры изображений и подтвердить, что они такие же, как в XML или нет. Поэтому я хочу вывод, как:

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

Это возможно только в Windows без другого установленного программного обеспечения?

1 ответ1

0

Вместо того, чтобы сравнивать их, я бы написал сценарий для воссоздания XML-файлов из вывода такого инструмента, как ImageMagick's identify

Я бы начал с чего-то вроде

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

Затем исправьте обработку расширения имени файла и т.д.


Чтобы сделать сравнение, как вы просите, я бы использовал лучший язык сценариев (в моем случае это Perl, но я ожидаю, что многие другие люди будут использовать встроенный PowerShell)

Вы можете использовать приведенный выше код, но записать вывод в фиксированное имя файла, а затем использовать fc и if в цикле for для генерации желаемого результата.


Чтобы делать то, что вы просите, используя только встроенные инструменты, я бы посмотрел на powershell.

Вот пример с powershellcommunity.org, который вы можете использовать в качестве отправной точки.

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 
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .