我在一个文件夹中有许多图像文件。大多数是 jpg,但也有一些 png、bmp、gif、tif(但如果没有其他文件,jpg 是最重要的)。同一文件夹中还有许多与图像文件同名的 xml 文件。因此有这样的文件:1.jpg、1.xml、a.png、a.xml、3g.bmp、3g.xml...
所有 xml 文件都只有 1 行:(<IMGRES WIDTH="1234" HEIGHT="567" />
当然数字不一样)。
我正在寻找一些简单的方法来检查所有图像大小并确认它们是否与 xml 中的相同。所以我想要这样的输出:
imagename, xmlwidth x xmlheight, realwidth x realheight, match/error
这仅在 Windows 上且没有安装其他软件的情况下可行吗?
答案1
我不会比较它们,而是编写一个脚本来根据工具的输出重新创建 XML 文件,例如ImageMagick 的identify
我会从类似的事情开始
for %f in (*.*) do ^
identify -format '<IMGRES WIDTH="%w" HEIGHT="%h" />' %f% > %f%.xml
然后修复文件扩展名处理等等。
为了按照您的要求进行比较,我会使用更好的脚本语言(在我的情况下是 Perl,但我希望许多其他人会使用内置的 powershell)
您可以使用上面的代码,但将输出写入固定文件名,然后在 for 循环中使用fc
和来生成所需的输出。if
为了仅使用内置工具执行您要求的操作,我会查看 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
}