【问题标题】:I want to connect my program to image scanner我想将我的程序连接到图像扫描仪
【发布时间】:2013-03-15 21:25:42
【问题描述】:

我想用python编写程序,它可以从扫描仪获取输入并保存为jpg。 我不知道如何开始。 请帮忙。

【问题讨论】:

  • 这是在 Windows 计算机上还是 Linux 上?
  • 我要跨平台使用

标签: python-2.7 image-scanner pyusb


【解决方案1】:

六年过去了,我今天来到这里寻找同一个问题的答案。

不幸的是,当前接受的答案中的 Pysane 和 python-imagescanner 不再有效,但经过进一步搜索,我发现 libinsane 现在似乎是一个更好的选择。

【讨论】:

    【解决方案2】:

    在 Windows 中,您要查看的模块称为 Python TWAIN module,而在 Linux(我认为是 Mac)中,您应该查看 pysane

    现在我正在研究这个,看起来有一个名为 python-imagescanner 的项目试图将这两种方法包装到一个公共库中,

    来自imagescanner的documentation

    Getting access to a scanner device:
    
     from imagescanner import ImageScanner
    
     # instantiate the imagescanner obj 
     iscanner = ImageScanner()
    
     # get all available devices
     scanners = iscanner.list_scanners()
    
     # choose one of the devices
     scanner = scanners[0]
    
     # scan your file (returns a PIL object)
     scanner.scan()
    

    【讨论】:

    • 注意:Python twain 仅支持 32 位 Windows。
    • 我已经有一段时间没有使用这个答案了,但是 64 位 Windows 不包含 32 位软件模拟器吗?
    • 64 位 Windows 确实支持运行 32 位软件。我的猜测是 TWAIN 与系统交互的级别足够低,以至于架构是一个重要的细节。
    • @JasonSperske 我不明白如何使用documentation在windows上安装python-imagescanner
    【解决方案3】:

    我也是,六年后搜索,我发现这个Capturing an Image from a WIA-compatible Digital Camera 真的很有帮助。它使用win32com.client

    它适用于我的扫描仪 Cannon DR-C240。

    代码:

    import win32com.client, time, os
    
    WIA_COM = "WIA.CommonDialog"
    
    WIA_DEVICE_UNSPECIFIED = 0
    WIA_DEVICE_CAMERA = 2
    
    WIA_INTENT_UNSPECIFIED = 0
    
    WIA_BIAS_MIN_SIZE = 65536
    WIA_BIAS_MAX_QUALITY = 65536
    
    WIA_IMG_FORMAT_PNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
    
    WIA_COMMAND_TAKE_PICTURE="{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"
    
    def acquire_image_wia():
        wia = win32com.client.Dispatch(WIA_COM) # wia is a CommonDialog object
        dev = wia.ShowSelectDevice()
        for command in dev.Commands:
            if command.CommandID==WIA_COMMAND_TAKE_PICTURE:
                foo=dev.ExecuteCommand(WIA_COMMAND_TAKE_PICTURE)
    
        i=1
        for item in dev.Items:
            if i==dev.Items.Count:
                image=item.Transfer(WIA_IMG_FORMAT_PNG)
                break
            i=i+1
    
        fname = 'wia-test.png'
        if os.path.exists(fname):
            os.remove(fname)
        image.SaveFile(fname)
    
    os.chdir("c:/temp")
    acquire_image_wia()
    

    【讨论】:

    【解决方案4】:

    在这里仅提及其他方法,以防有人需要具有少量代码的简单方法,否则您可以使用@Marcelo 的答案above

    这个想法是使用Windows Fax and Scan 来扫描文档。 这是相同的python代码。

    import os
    os.system("WFS")
    

    它将为您打开 Windows 传真和扫描。现在您可以扫描您的文档了。

    祝你好运!!

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 2015-05-02
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2010-10-06
      相关资源
      最近更新 更多