16-битные цветные изображения с пиинсаном

Сеансы сканирования 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 ответ

Решение

Вы правы, это ограничение от подушки (PIL). На самом деле вы можете увидеть преобразование из необработанного изображения в изображение PIL здесь: https://github.com/openpaperwork/pyinsane/blob/master/pyinsane2/sane/abstract.py

Если вам действительно нужны эти дополнительные данные, я думаю, что единственный вариант - использовать Sane API напрямую и делать свои собственные преобразования:

import pyinsane2.sane.rawapi

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

К сожалению, выполнение этого приведет к потере переносимости Windows (поддержка WIA), и эта часть Pyinsane вообще не задокументирована. Однако pyinsane.sane.rawapi предоставляет API Sane C только незначительные преобразования, чтобы сделать его более дружественным к Pythony. Поэтому я думаю, что вы можете просто обратиться к документации Sane для получения информации: http://www.sane-project.org/html/doc009.html.

Другие вопросы по тегам