2011-02-01 66 views
3

我有一個vbscript腳本,我需要咀嚼一個.tif文件的目錄。對於每個文件,我需要確定文件是否按比例分配爲橫向或縱向。基本上,我需要能夠獲得每個文件的圖像尺寸。因此,我已經看過一些人閱讀文件文件頭的例子,從jpg或bmp文件中提取這類信息。有沒有人做過同樣的事情來提取tiff文件的尺寸?如何確定tiff文件的圖像尺寸?

+0

你的腳本還需要做什麼?如果它是一個獨立的腳本,那麼你最好將它移植到別的東西上(.NET,Powershell),而不是試圖在VBScript中讀取TIFF文件。曾經有一個名爲ImgSize.dll的免費組件,可以從ServerObjects中執行此操作,但它已經停止並且不再可用。 – 2011-02-01 21:26:22

回答

9

在VBScript中,你能確定有兩種方法圖像尺寸:

  1. 使用WIA自動化庫download linkMSDN documentationan excellent Hey, Scripitng Guy! article on the subject)。一旦你的wiaaut.dll庫中註冊,您可以使用下面簡單的代碼:

    Set oImage = CreateObject("WIA.ImageFile") 
    oImage.LoadFile "C:\Images\MyImage.tif" 
    
    WScript.Echo "Width: " & oImage.Width & vbNewLine & _ 
          "Height: " & oImage.Height 
    


  2. 使用GetDetailsOf方法來讀取相應的擴展文件屬性。這是一種本地Windows腳本編寫方法,因此不需要外部庫;但代碼更長:

    Const DIMENSIONS = 31 
    CONST WIDTH = 162 
    CONST HEIGTH = 164 
    
    Set oShell = CreateObject ("Shell.Application") 
    Set oFolder = oShell.Namespace ("C:\Images") 
    Set oFile = oFolder.ParseName("MyImage.tif") 
    
    strDimensions = oFolder.GetDetailsOf(oFile, DIMENSIONS)  
    strWidth = oFolder.GetDetailsOf(oFile, WIDTH) 
    strHeigth = oFolder.GetDetailsOf(oFile, HEIGTH) 
    
    WScript.Echo "Dimensions: " & strDimensions & vbNewLine & _ 
          "Width: "  & strWidth  & vbNewLine & _ 
          "Height: "  & strHeigth 
    

    此腳本輸出類似:

    尺寸:2464 X 3248
    寬度:2464個像素
    高度:3248個像素

    所以如果你需要普通數字,你必須從返回的字符串中提取它們。

    此方法還有另一個問題 - 在不同的Windows版本中,屬性索引(腳本開頭的那些常量)不同,正如我在this answer中所解釋的。上述腳本適用於Windows 7,但如果您使用其他Windows版本,或者如果您希望該腳本適用於不同的Windows版本,則需要使用特定於版本的索引。可用屬性索引的最完整列表是here

+0

Shell方法正是我所期待的。謝謝海倫! – 2011-02-01 23:16:34

1

我會推薦使用Atalasoft's DotImage Photo其強大的&它是免費的!但是,這是一個.NET包,所以你需要做一些Regasm Magic才能使它工作。在你開始之前去檢查Use vb.net in VBScript

以下是您需要獲取尺寸的代碼。

Public Function GetHeight(path As String) As Integer 

    Using stm As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read) 
     Dim decoder As New TiffDecoder() 
     If Not decoder.IsValidFormat(stm) Then 
      Throw New Exception("not a TIFF") 
     End If 
     Dim image As AtalaImage = decoder.Read(stm, Nothing) 
     Return image.Height 
      ' Return image.Width --- To return the Width. 

    End Using 
End Function 
+1

你最好做Dim Info,因爲它將分配更少的內存,因爲ImageInfo = decoder.GetImageInfo(stm,Nothing)。另請注意,TIFF是一種多頁格式,dotImage PhotoFree不支持多頁文檔,但dotImage PhotoPro和dotImage文檔成像可以。 – plinth 2011-02-01 21:24:48