【问题标题】:Get Image Resolution via VBScript通过 VBScript 获取图像分辨率
【发布时间】:2014-02-18 17:50:35
【问题描述】:

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

例如

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

【问题讨论】:

    标签: windows vbscript


    【解决方案1】:

    您可以使用WIA.ImageFile 脚本对象的HorizontalResolutionVerticalResolution 属性获取图像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
      

    【讨论】:

    • 非常棒的海伦,谢谢。
    【解决方案2】:

    您可以使用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
    

    【讨论】:

    • 感谢 QuickNull,但您的代码正在获取宽度和高度,但 DPI 中没有分辨率:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2014-11-20
    相关资源
    最近更新 更多