1

Тема: VBScript: сканирование с заданными параметрами

Сканирование с заданным форматом (размером и положением области сканирования), разрешением, цветовой моделью и сохранение полученного изображения в файл посредством технологии Windows Image Acquisition (WIA):

Option Explicit

Const ScannerDeviceType = 1
Const ColorIntent = 1
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"


Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice

Dim objImageFile
Dim objImageProcess

Dim strPath2Save
Dim strFormat
Dim intQuality
Dim intDPI
Dim intHorizontalSize
Dim intVerticalSize


' Задаём характеристики изображения
strPath2Save      = "c:\MyImage.jpg"      ' Полное имя файла для сохранения
strFormat         = wiaFormatJPEG         ' Формат файла — *.jpg
intQuality        = 85                    ' Качество jpg
intDPI            = 150                   ' Разрешение — 150 dpi
intHorizontalSize = (210 / 25.4) * intDPI ' Размер по горизонтали — A4
intVerticalSize   = (297 / 25.4) * intDPI ' Размер по вертикали — A4


Set objDeviceManager = WScript.CreateObject("WIA.DeviceManager")
Set objDeviceInfos = objDeviceManager.DeviceInfos

If objDeviceInfos.Count > 0 Then
    ' Выбираем устройство для сканирования. Если оно единственное, то сие произойдёт без отображения диалога.
     Set objDevice = WScript.CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)
    ' Кроме того, зная DeviceID устройства, можно использовать иной способ подключения, например:
    'Dim objDeviceInfo
    '
    'For Each objDeviceInfo In objDeviceManager.DeviceInfos
    '    WScript.Echo objDeviceInfo.DeviceID
    '    
    '    If objDeviceInfo.DeviceID = "{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0000" Then
    '        Set objDevice = objDeviceInfo.Connect
    '    End If
    'Next
    
    If Not objDevice Is Nothing Then
        WScript.Echo objDevice.Properties.Item("Name") & " [" & objDevice.DeviceID & "]"
        WScript.Echo "Scanning..."
        
        With objDevice
            With .Items(1)
                ' Задаём требуемые характеристики изображения для сканирования
                With .Properties
                    .Item("6146").Value = ColorIntent             ' Цветовая модель (Current Intent)
                    
                    ' Разрешение…
                    .Item("6147").Value = intDPI                  ' …по горизонтали (Horizontal Resolution)
                    .Item("6148").Value = intDPI                  ' …по вертикали (Vertical Resolution)
                    
                    ' Начало области сканирования…
                    .Item("6149").Value = 0                       ' …по горизонтали (Horizontal Start Position)
                    .Item("6150").Value = 0                       ' …по вертикали (Vertical Start Position)
                    
                    ' Размер области сканирования…
                    .Item("6151").Value = intHorizontalSize       ' …по горизонтали (Horizontal Extent)
                    .Item("6152").Value = intVerticalSize         ' …по вертикали (Vertical Extent)
                End With
                
                ' Инициируем начало операции сканирования
                Set objImageFile = .Transfer()
                
                ' Конвертируем полученное изображение
                WScript.Echo "Converting..."
                
                Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")
                
                With objImageProcess
                    With .Filters
                        .Add objImageProcess.FilterInfos("Convert").FilterID
                        
                        With .Item(1).Properties
                            .Item("FormatID").Value = strFormat  ' Формат изображения
                            .Item("Quality").Value  = intQuality ' Качество изображения
                        End With
                    End With
                    
                    Set objImageFile = .Apply(objImageFile)
                End With
            End With
        End With
        
        ' Если файл существует — предварительно удаляем его
        With WScript.CreateObject("Scripting.FileSystemObject")
            If .FileExists(strPath2Save) Then
                .DeleteFile strPath2Save
            End If
        End With
        
        ' Сохраняем полученное изображение
        objImageFile.SaveFile strPath2Save
        
        WScript.Echo "Complete."
        
        Set objDevice = Nothing
    Else
        WScript.Echo "Cancel scanning by user"
    End If
Else
    WScript.Echo "No connected devices"
End If

Set objDeviceManager = Nothing
Set objDeviceInfos   = Nothing

WScript.Quit 0

2

Re: VBScript: сканирование с заданными параметрами

Если вдруг у вас не оказалось нужной dll-библиотеки для создания объекта "WIA.DeviceManager", она тут: Download details: Windows® Image Acquisition Automation Library v2.0 Tool: Image acquisition and manipulation component for VB and scripting

Стремление - залог успеха

3

Re: VBScript: сканирование с заданными параметрами

На практике встретился случай: в строке задания размеров А4, предельно допустимая длина оказалась равной 296.92 мм вместо 297 мм. Т.е:

intVerticalSize   = (296.92 / 25.4) * intDPI ' Размер по вертикали — A4
Стремление - залог успеха