通过VBScript获取图像分辨率

时间:2014-02-17 15:16:38

标签: windows vbscript

如何使用VBScript在DPI中获得图像分辨率?

例如

Res= GET "M.jpg" Resolution
If Res > 100
   Echo "GOODQ"

2 个答案:

答案 0 :(得分:3)

您可以使用HorizontalResolution脚本对象的VerticalResolutionWIA.ImageFile属性来获取图像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。但代码会更长,更麻烦,因为:

  • 水平分辨率垂直分辨率文件属性的索引在不同的Windows版本上有所不同(有关详细信息,请参阅this pagethis my answer
  • 扩展文件属性将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
    

答案 1 :(得分:1)

您可以使用WIA Automation库执行此类操作。

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