求教高手:怎么用TWAIN来控制扫描仪

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教高手:怎么用TWAIN来控制扫描仪相关的知识,希望对你有一定的参考价值。

参考技术A 你的设备要支持TWAIN协议才可以

python twain 扫描

def multiScan(self):
    """ Scan and return an array of PIL objects 
        If no images, will return an empty array
    """

    self.scanner.RequestAcquire(0, 1)
    images = []
    handles = []
    try:
        handle, more = self.scanner.XferImageNatively()
        handles.append(handle)
    except twain.excDSTransferCancelled:
        return []
    while more != 0:
        try:
            handle, more = self.scanner.XferImageNatively()
            handles.append(handle)
        except twain.excDSTransferCancelled:
            more = 0

    for handle in handles:
        images.append(Image.open(StringIO(twain.DIBToBMFile(handle))))
        twain.GlobalHandleFree(handle)

    return images

 

import twain

sm = twain.SourceManager(0)
ss = sm.OpenSource()

for i in range(3):  //for ex. 3 documents in the scanner device
   ss.RequestAcquire(0,0)
   rv = ss.XferImageNatively()
   if rv:
       (handle, count) = rv
       twain.DIBToBMFile(handle, \'{i}.bmp\'.format(i))

 

import twain

sm = twain.SourceManager(0)
sm.SetCallback(onTwainEvent)
ss = sm.OpenSource()
index = 0

for i in range(3):  //for ex. 3 documents in the scanner device
   ss.RequestAcquire(0,0)

def onTwainEvent(event):
    if event == twain.MSG_XFERREADY:
        saveImage()

def saveImage():
    rv = ss.XferImageNatively()
    if rv:
        (handle, count) = rv
        twain.DIBToBMFile(handle, \'{index}.bmp\'.format(index))
        index += 1

 

import twain 
sm = twain.SourceManager(0) 
ss = sm.OpenSource() 
ss.RequestAcquire(0,0) 
rv = ss.XferImageNatively() 
if rv: 
(handle, count) = rv 
twain.DIBToBMFile(handle, \'image.bmp\')

 1、降低扫描分辨率、能用灰度就不用彩色、能用24位彩色就不用32位彩色

2、使用自动进纸器
3、采用高压缩比的图像格式,能用jpg就不用tiff,能用tiff就不用bmp
Source.GetCapabilityDefault(CapabilityCode)
Source.GetCapability(CapabilityCode)
Source.GetCapabilityCurrent(CapabilityCode)
Source.SetCapability(CapabilityCode)
Source.ResetCapability(CapabilityCode)
Source.GetImageInfo():返回XResolution, YResolution, ImageWidth, ImageLength, SamplesPerPixel, BitsPerSample, BitsPerPixel, Planar, PixelType, Compression
Source.GetImageLayout():返回((left, top, right, bottom) document_number, page_number, frame_number)

One of the CAP_* (Generic Capabilities), ICAP_ (Image Capabilities)

 

以上是关于求教高手:怎么用TWAIN来控制扫描仪的主要内容,如果未能解决你的问题,请参考以下文章

怎样操作扫描仪

Java 中的 Twain 设备(扫描仪)控制

如何通过 TWAIN 获取扫描仪当前的 DPI 设置?

C#:使用Twain协议实现扫描仪连续扫描

文档扫描:TWAIN、WIA、ISIS 还是 SANE?

强制终止 WIA 或 TWAIN 驱动程序(扫描仪)