【发布时间】:2014-02-18 17:50:35
【问题描述】:
如何使用 VBScript 获得 DPI 中的图像分辨率?
例如
Res= GET "M.jpg" Resolution
If Res > 100
Echo "GOODQ"
【问题讨论】:
如何使用 VBScript 获得 DPI 中的图像分辨率?
例如
Res= GET "M.jpg" Resolution
If Res > 100
Echo "GOODQ"
【问题讨论】:
您可以使用WIA.ImageFile 脚本对象的HorizontalResolution 和VerticalResolution 属性获取图像DPI:
Set objImage = CreateObject("WIA.ImageFile")
objImage.LoadFile "C:\M.jpg"
If objImage.HorizontalResolution > 100 Then
Log.Message "GOODQ (" & objImage.HorizontalResolution & " DPI)"
End If
为了完整起见,Windows Vista 及更高版本还有另一种解决方案 — 使用 Folder.GetDetailsOf 方法从扩展文件属性中读取图像 DPI。但是代码会更长而且有点乱,因为:
扩展文件属性将 DPI 作为字符串返回,例如 240 dpi;您可能需要将其转换为数字。
' For Windows 7
Const HORIZONTAL_RESOLUTION = 161
Const VERTICAL_RESOLUTION = 163
Dim objShell : Set objShell = CreateObject("Shell.Application")
Dim objFolder : Set objFolder = objShell.Namespace("C:\MyFolder")
Dim objFile : Set objFile = objFolder.ParseName("M.jpg")
Dim strDpi : strDpi = objFolder.GetDetailsOf(objFile, HORIZONTAL_RESOLUTION) ' Returns DPI as a string like "240 dpi"
Dim dpi : dpi = ToInt(strDpi)
If dpi > 100 Then
Log.Message "GOODQ (" & dpi & " DPI)"
End If
' Extracts a number from a string, e.g. "240 dpi" -> 240
' NB: no error handling
Function ToInt(ValueStr)
Dim objRE : Set objRE = New RegExp
objRE.Pattern = "\d+"
Dim colMatches : Set colMatches = objRE.Execute(ValueStr)
ToInt = CLng(colMatches(0).Value)
End Function
【讨论】:
您可以使用WIA Automation Library 执行类似的操作。
Set objImage = CreateObject("WIA.ImageFile")
objImage.LoadFile "M.jpg"
If objImage.Width > 100 And objImage.Height > 100 Then
WScript.Echo "GOODQ" & vbNewLine & "Width: " & _
objImage.Width & vbNewLine & _
"Height: " & objImage.Height
End If
【讨论】: