# -*- coding: utf-8 -*- """ Utilisation d'un scanner twain Dépendances : eztw32.dll (attention: renommée en minuscules) cette DLL provient de EZTwain classic (free) ; voir http://www.eztwain.com/eztwain1.htm Cette DLL est aussi utilisée par CmdTwain http://www.gssezisoft.com/main/index.php/support/cmdtwain et, alternativement, par AljexClient http://code.google.com/p/aljex-client (perso : voir D:\Dev\Twain4) """ GlobalPVersion='0.1.01' import os,time import types import ctypes class scanner(object): """ Les scans sont tous faits en couleur (24 bits), en BMP, à la taille maxi du scanner mode = 0 pour montrer la fenêtre du scan(er) mode = 1 pour scanner sans interactivité Résolution en ppp (points par pouce) ; conseils : 150 ppp pour documents textes ; 300 ppp si image ou photo filename = None cela demandera le nom du fichier (boite de dialogue) """ def __init__(self, mode=1,resolution=300,profondeur=8,filename=None): self.tw=ctypes.windll.LoadLibrary("eztw32.dll") self.mode=mode self.resolution=resolution self.filename=filename self.profondeur=profondeur self.result=None def scan(self, filename=""): """ Attention, ne scanne QU'EN .BMP """ if filename=="": filename=self.filename self.filename=filename if self.mode==0: self.tw.TWAIN_SetHideUI(0) else: self.tw.TWAIN_SetHideUI(1) self.tw.TWAIN_OpenDefaultSource() etat=0 timeout=5 for i in range(timeout*10): etat = self.tw.TWAIN_State() if etat == 4: break time.sleep(0.1) print 60,self.tw.TWAIN_GetPixelType() self.result = self.tw.TWAIN_AcquireToFilename(0,filename) self.tw.TWAIN_OpenDefaultSource() etat=0 timeout=5 for i in range(timeout*10): etat = self.tw.TWAIN_State() if etat == 4: break time.sleep(0.1) print 60,self.tw.TWAIN_GetPixelType() """ result : 0 OK -1 erreur de scan ou nom de fichier non entré ou erronné -2 erreur d'ouverture du fichier -3 erreur de mémorisation de l'image -4 erreur d'écriture du fichier """ def selectsource(self): self.tw.TWAIN_SelectImageSource(0) # choix du scanner ; sélection source def setmode(self, mode=None): if mode is None: mode=self.mode self.mode=mode def setprofondeur(self, profondeur=None): if profondeur is None: profondeur=self.profondeur self.profondeur=profondeur self.tw.TWAIN_OpenDefaultSource() etat=0 timeout=5 for i in range(timeout*10): etat = self.tw.TWAIN_State() if etat == 4: break time.sleep(0.1) if etat == 4: print 92,":",self.tw.TWAIN_GetBitDepth() self.tw.TWAIN_SetBitDepth(self.profondeur) time.sleep(0.250) print 95,":",self.tw.TWAIN_GetBitDepth() def setresolution(self, resolution=None): if resolution is None: resolution=self.resolution self.resolution=resolution self.tw.TWAIN_OpenDefaultSource() etat=0 timeout=5 for i in range(timeout*10): etat = self.tw.TWAIN_State() if etat == 4: break time.sleep(0.1) if etat == 4: self.tw.TWAIN_SetCurrentResolution(ctypes.c_double(self.resolution)) if __name__=='__main__': s=scanner() s.setprofondeur(1) s.setresolution(200) #s.setmode(1) s.scan("L:\\essai.bmp")