2014-02-17 135 views

回答

3

你甘使用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 
    
+0

真是太好了海倫,謝謝。 – Nofuzy

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 
+0

感謝QuickNull但你的代碼越來越寬度和高度,但並不分辨率DPI :( – Nofuzy