我正在更新一个旧的图像处理应用程序,我第一次被录用时写了回信。我收到的一个请求是在应用程序上有一个“扫描”按钮,这样图像就可以被扫描和处理,而不必打开爱普生扫描管理器或按下按钮(一些成像技术人员很难从座位上够到他们的扫描按钮)。我已经在powershell中破解了一些东西,可以完成这项工作,并且可以轻松地链接到python应用程序中的按钮,但我不能选择DPI的值。分辨率对这些扫描很重要,无论是面向客户还是编程原因,并且它们必须是至少300DPI,但他们总是以低得多的分辨率保存,我似乎无法弄清楚如何进入并更改扫描仪的WIA设置。我可以控制文件保存后的压缩,但我无法控制扫描仪实际扫描图片时使用的分辨率。我已经找到了this资源,但不知道如何实际实现这些设置的更改。我们只使用jpeg,这些扫描仪只用于扫描产品,没有应用滤镜或蒙版,所以应该很简单,但我只需要弄清楚这个DPI的事情。这是我到目前为止所做的:
Set-ExecutionPolicy RemoteSigned
$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()
$imageProcess = new-object -ComObject WIA.ImageProcess
$wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
foreach ($item in $device.Items) {
$image = $item.Transfer()
}
$Basepath = Join-Path -Path "C:\Users" -ChildPath $env:username
$NewPath = Join-Path -Path $BasePath -ChildPath "Pictures\My Scans\scan daemon"
$filename = Join-Path -Path $NewPath -ChildPath "Scan {0}.jpg"
$index = 0
while (test-path ($filename -f $index)) {[void](++$index)}
$filename = $filename -f $index
$image.SaveFile($filename)
我可以扫描并保存文件,但它总是以低分辨率保存。这是一个问题,因为我们的客户希望看到高分辨率的图像,因为我的图像处理应用程序需要一定大小的图像,所以即使我们愿意使用它们,也无法正确处理这些图像。我觉得这应该很简单,甚至可能是一行代码,但我对Windows或PowerShell不是很熟悉,目前我对这行代码是什么或如何找到它感到困惑。
本质上我只是想找到一种方法
SetWIAProperty(scannnerItem.Properties, WIA_HORIZONTAL_SCAN_RESOLUTION_DPI, 300);
SetWIAProperty(scannnerItem.Properties, WIA_VERTICAL_SCAN_RESOLUTION_DPI, 300);
无论我在哪里看,我似乎都找不到在powershell中运行.net命令的语法指南,而不仅仅是处理基本的网络。
2条答案
按热度按时间wgeznvg71#
所以我回答这个问题,不是因为它已经解决了,严格来说,而是因为我最终以不同的方式解决了潜在的问题。我用C#重写了需要这样做的应用程序,直接使用WIA来完成扫描任务。这种方法有新的问题,但我可以获得扫描并调整图像大小和分辨率。由于Powershell可以使用.Net程序集,即使是自定义的,如果我决定继续使用powershell,也可以通过powershell运行扫描代码,但是用.Net重写所有内容更明智,因为这样做也改善了程序的其他功能。无论如何,这是我的.Net代码,以防其他人想要这样做:
这有它自己的一些问题,我仍然在试图处理,但除非你需要真正的照片质量的图像,这将工作得很好。当然,你需要改变你的路径和变量名称,以适应您的项目,然后,如果你想在powershell中调用模块,你可以编译为.exe文件,然后直接调用它像任何其他文件,或者你可以直接将它作为一个.Net对象来使用:
同样,我最终没有这样做,所以我不会称这个问题“解决”本身,但这段代码在我的C#应用程序中工作,如果我决定继续使用它来调用设置更改,它将在powershell中工作。如果其他人试图使用powershell扫描,如果你愿意编写.Net代码来完成它,这应该可以工作。如果你想要一个纯powershell解决方案,还在等待比我更擅长的人来提供它。如果发生这种情况,我会很高兴地重新分配复选标记。)
dgenwo3n2#
我偶然发现了你的帖子,寻找改变默认300DPI扫描分辨率的解决方案。经过几个小时的搜索,我想出了一个简单而愚蠢的方法,很难相信。在你
Transfer
你的图像对象之前,添加以下行为600 DPI$item.properties("6147").Value = 600
$item.properties("6148").Value = 600
下面是我的完整代码