0

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]
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 をより Python に適したものにするためのわずかな変換のみを提供します。したがって、情報については、Sane のドキュメントを参照してください: http://www.sane-project.org/html/doc009.html

于 2016-10-07T14:44:25.497 に答える