Как определить размеры изображения файла TIFF? - PullRequest
3 голосов
/ 01 февраля 2011

У меня есть скрипт vbscript, и мне нужно просмотреть каталог файлов .tif. Для каждого файла мне нужно определить, пропорционален ли файл как пейзаж или портрет. По сути, мне нужно иметь возможность получать размеры изображения для каждого файла. Итак, я видел несколько примеров людей, читающих заголовки файлов, чтобы извлечь информацию такого рода из файлов jpg или bmp. Кто-нибудь делал то же самое, чтобы извлечь размеры для файла TIFF?

Ответы [ 2 ]

9 голосов
/ 02 февраля 2011

В VBScript вы можете определить размеры изображения двумя способами:

  1. Используя Библиотека автоматизации WIA ( ссылка для скачивания , документация MSDN , превосходная Привет, Scripitng Guy! статья на эту тему ).После регистрации библиотеки 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, как я объяснил в этот ответ .Вышеприведенный скрипт предназначен для Windows 7, но если вы используете другие версии Windows или если вы хотите, чтобы скрипт работал на разных версиях Windows, вам нужно будет использовать индексы, зависящие от версии.Наиболее полный список доступных индексов свойств здесь здесь .

1 голос
/ 02 февраля 2011

Я бы порекомендовал использовать DotImage Photo от Atalasoft Это мощное и бесплатное приложение!Но это пакет .NET, поэтому вам придется сделать Regasm Magic , чтобы он заработал.Перед тем, как начать, проверьте Используйте vb.net в 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
...