扫描自动化与PowerShell和WIA -如何设置PNG作为图像类型



我所拥有的:我使用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#代码使用了另一种WIA方法,用户可以将一些参数传递给扫描对话框,如PNG作为文件格式

现在我想知道是否以及如何可能实现相同的只有与PowerShell


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

  • http://deletethis.net/dave/?uri=http%3A%2F%2Fcerealnumber.livejournal.com%2F47638.html
  • http://ardalis.com/powershell-control-over-nikon-d3000-camera
  • http://msdn.microsoft.com/en-us/library/windows/desktop/ms630806 (v = vs.85) . aspx

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

您应该将FormatID字符串参数传递给Transfer方法。可用格式列表可在MSDN

中获得。

然而,有一个问题。如本文所述,Transfer方法不必观察请求的格式,在这种情况下,必须手动转换输出。通过将MSDN的VB示例转换为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")

最新更新