2014-02-17 62 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