0

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

这是我目前正在使用的示例代码,并获取了 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]
4

1 回答 1

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

于 2016-10-07T14:44:25.497 回答