使用pyinsane

时间:2016-09-12 11:32:15

标签: python pillow scanning pyinsane

pyinsane的扫描会话默认返回8位PIL图像列表。即使在16位模式下完成扫描(例如使用透明单元),也是如此。有没有办法获得16位图像(我认为PIL不支持)或原始数据来自pyinsane?

以下是我目前使用的示例代码,并获取8位颜色深度的图像:

import pyinsane.abstract as pyinsane
device = pyinsane.get_devices()[0]

device.options['resolution'].value = 1200
device.options['mode'].value = 'Color'
device.options['source'].value = 'Transparency Unit'

scan_session = device.scan(multiple=False)
try:
    while True:
        scan_session.scan.read()
except EOFError:
    pass
image = scan_session.images[0]

1 个答案:

答案 0 :(得分:1)

你是对的,这是Pillow(PIL)的限制。您可以在此处看到从原始图像到PIL图像的转换:https://github.com/openpaperwork/pyinsane/blob/master/pyinsane2/sane/abstract.py#L161

如果您真的需要这些额外的数据,我想唯一的选择是直接使用Sane API并进行自己的转换:

import pyinsane2.sane.rawapi

pyinsane.sane.rawapi.sane_init()
(...)
pyinsane.sane.rawapi.sane_exit()

不幸的是,这样做会让你失去Windows的可移植性(WIA支持),并且Pyinsane的这部分根本没有记录。但是,pyinsane.sane.rawapi为Sane C API提供了很少的转换,使其更适合Pythony。所以我想你可以参考Sane文档中的信息:http://www.sane-project.org/html/doc009.html