16位彩色图像与pyinsanity



pyinsanity的扫描会话默认返回一个8位PIL图像列表。这是真的,即使扫描已经在16位模式下完成(例如使用透明单元)。有没有办法从pyinsanity中获取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]

你是对的,这是枕头(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支持),并且pyinsanity的这一部分根本没有文档。然而,pyinsanity . Sane .rawapi提供了Sane C API,仅进行了一些小的转换,以使其更适合python。所以我猜你可以参考Sane文档获取信息:http://www.sane-project.org/html/doc009.html .

最新更新