pyinsane 的 16 位彩色图像

16-bit color images with pyinsane

pyinsane 的扫描会话 return 默认情况下的 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]

没错,这是 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 .