使用PowerShell和WIA扫描自动化 - 如何将PNG设置为图像类型

时间:2014-08-18 20:09:21

标签: powershell-v2.0 windows-7-x64 wia

我拥有的内容:我正在使用PowerShell 2.0和WIA快速扫描并保存平板扫描仪中的图像。目标是避免所有对话,只需单击一下。这段代码简单,简洁,有效。

$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()    

foreach ($item in $device.Items) { 
    $image = $item.Transfer() 
}    

$image.SaveFile("D:\Scan.$($image.fileExtension)")

问题:上述方法始终生成BMP文件。但我想要PNG文件。

我看到了这个C# code which uses another WIA method用户能够将一些参数传递给扫描对话框,如PNG作为文件格式

现在我想知道是否以及如何仅使用PowerShell实现相同的功能


我在这里找到了大部分代码

PS:以防你的解决方案涉及'拍照'命令(wiaCommandTakePicture)。不幸的是,我的CanoScan LIDE 210不支持该命令

1 个答案:

答案 0 :(得分:2)

您应该将FormatID字符串参数传递给Transfer方法。 MSDN

中提供了可用格式列表

然而,有一个问题。正如here所解释的,Transfer方法不必遵守所请求的格式,在这种情况下必须手动转换输出。通过将MSDN's VB example转换为PowerShell,我们可以获得此功能(使用我的扫描仪在我的计算机上运行):

$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()    

$wiaFormatPNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
foreach ($item in $device.Items) { 
    $image = $item.Transfer($wiaFormatPNG) 
}    

if($image.FormatID -ne $wiaFormatPNG)
{
    $imageProcess = new-object -ComObject WIA.ImageProcess
    $imageProcess.Filters.Add($imageProcess.FilterInfos.Item("Convert").FilterID)
    $imageProcess.Filters.Item(1).Properties.Item("FormatID").Value = $wiaFormatPNG
    $image = $imageProcess.Apply($image)
}

$image.SaveFile("C:/my_full_path/test.png")