Pluto
Почему obj = twain.SourceManager(0) вызывает ошибку?
ну шо вам сказать? вы документацию то читали? что там написано?
class twain.SourceManager(parent_window=None, MajorNum=1, MinorNum=0, Language=13, Country=1, Info='', ProductName='TWAIN Python Interface', ProtocolMajor=2, ProtocolMinor=1, SupportedGroups=3, Manufacturer='Kevin Gill', ProductFamily='TWAIN Python Interface', dsm_name=None)
…
:param parent_window: can contain Tk, Wx or Gtk window object or the windows handle of the main window
…
тоесть первый аргумент это указатель на ваше главное окно.. что такое 0 который вы пытаетесь туда передать? Попробуйте вообще без аргументов вызвать..
Pluto
Только создаёт он, видимо, никак не сжатый jpg. Файл больно здоровый получается.
А с чего ему создавать сжатй жпег? если DIBToBMFile согласно документации “Convert a DIB (Device Independent Bitmap) to a windows bitmap file format.” что в переводе означает конвертирует DIB в формат windows BMP.
Pluto
Но куда тут запихивать настройки сканирования? Как указать dpi, цветность и т.д?
никуда, я так понимаю автор тулзы оставл это вам. По сути сам модуль довольно “низкоуровневый” и требует от вас все писать рчками.
а twain.acquire по сути пример как его использовать
def acquire(path,
ds_name=None,
dpi=None,
pixel_type=None,
bpp=None,
frame=None,
parent_window=None,
show_ui=False,
dsm_name=None):
"""Acquires single image into file
:param path: Path where to save image
:keyword ds_name: name of twain data source, if not provided user will be presented with selection dialog
:keyword dpi: resolution in dots per inch
:keyword pixel_type: can be 'bw', 'gray', 'color'
:keyword bpp: bits per pixel
:keyword frame: tuple (left, top, right, bottom) scan area in inches
:keyword parent_window: can be Tk, Wx, Gtk window object or Win32 window handle
:keyword show_ui: if True source's UI dialog will be presented to user
Returns a dictionary describing image, or None if scanning was cancelled by user
"""
if pixel_type:
pixel_type_map = {'bw': TWPT_BW,
'gray': TWPT_GRAY,
'color': TWPT_RGB}
twain_pixel_type = pixel_type_map[pixel_type]
if not parent_window:
from tkinter import Tk
parent_window = Tk()
sm = SourceManager(parent_window, dsm_name=dsm_name)
try:
sd = sm.open_source(ds_name)
if not sd:
return None
try:
if pixel_type:
sd.set_capability(ICAP_PIXELTYPE, TWTY_UINT16, twain_pixel_type)
sd.set_capability(ICAP_UNITS, TWTY_UINT16, TWUN_INCHES)
if bpp:
sd.set_capability(ICAP_BITDEPTH, TWTY_UINT16, bpp)
if dpi:
sd.set_capability(ICAP_XRESOLUTION, TWTY_FIX32, dpi)
sd.set_capability(ICAP_YRESOLUTION, TWTY_FIX32, dpi)
if frame:
try:
sd.set_image_layout(frame)
except CheckStatus:
pass
res = []
def before(img_info):
res.append(img_info)
return path
def after(more):
if more:
raise CancelAll
try:
sd.acquire_file(before=before, after=after, show_ui=show_ui)
except excDSTransferCancelled:
return None
finally:
sd.close()
finally:
sm.close()
return res[0]
тоесть настройки dpi цветности , и тд.. устанавливаються через метод set_capability инстанса класса Source и в итоге дергает acquire_file, чтобы получить картинку в файл.
Вам чтобы считать в память несколько изображений нужно взять за образец twain.acquire допилить где считаете нужным и заменить acquire_file на вызов acquire_natively., В итоге вы должны получить список обьектов в памяти с изображениями и делать с ними что хотите.