65.9K
CodeProject 正在变化。 阅读更多。
Home

在 JavaScript 中控制扫描仪和网络摄像头

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2013年1月11日

CPOL

3分钟阅读

viewsIcon

37134

downloadIcon

1960

在 JavaScript 中控制扫描仪和网络摄像头。

引言

使 Web 应用程序能够控制摄像头和扫描仪是很常见的(虽然不容易)。例如,一个为医疗保健设计的应用程序将在登记处拍摄患者的照片,然后将照片存储在服务器上患者的医疗文件中。报告可以在稍后扫描并上传。

Dynamsoft 的 ImageCapture Suite 是一个专门用于从网络摄像头和扫描仪捕获图像/文档的浏览器插件。该组件与 Internet Explorer (32 位和 64 位)、Firefox、Chrome、Safari 和 Opera 兼容,并为成像设备提供最全面的支持。

主要特点

  • 从摄像头(内置和数码)、扫描仪和其他 TWAIN/WIA/UVC 兼容设备捕获图像。
  • 与 Windows 上的 Internet Explorer (32 位和 64 位)、Firefox、Chrome、Safari 和 Opera 兼容。
  • 编辑捕获的图像:裁剪、更改图像大小、旋转、倾斜校正等。
  • 将图像上传到本地文件夹、Web 服务器、FTP 站点、SharePoint 库、数据库和其他系统。
  • 支持的图像格式包括 BMP、JPEG、PNG、TIFF(单页和多页)和 PDF(单页和多页)。
  • 上传额外的文本信息以及图像。
  • 强大的安全功能。支持 SSL 和 Windows/Forms/Basic 身份验证。
  • 一维和二维条形码阅读器和 OCR 插件都作为您的附加选择提供。

图像捕获和上传

以下各节将向您展示如何将 Dynamsoft 的 ImageCapture Suite 集成到您的 Web 应用程序中,如何实现图像/文档采集以及如何将扫描的图像存储到 Web 服务器。但是,首先请确保您已将 SDK 安装到您的开发机器上。如果您尚未这样做,这里是下载链接:ImageCapture Suite 30 天免费试用下载

  1. 将 ImageCapture Suite 集成到您的 Web 应用程序。

SDK 为不同的浏览器提供两个版本。

  • ActiveX 版本:适用于 Windows 上的 32 位和 64 位 IE
  • 插件版本:适用于 Windows 上的 Firefox、Chrome、Safari 和 Opera

将两个版本嵌入到一个网页上很简单,这为您的客户提供了方便,无需访问多个页面即可在不同的浏览器中扫描图像。

插件版本:将以下 <embed> 标签添加到您的源代码中。

<embed type = "Application/ImageCaptureSuite-Plugin" id="DWObject"
OnPostTransfer = "Dynamsoft_OnPostTransfer"
OnPostAllTransfers = "Dynamsoft_OnPostAllTransfers"
pluginspage = "DynamicWebTWAINPlugIn.msi"
style ="width:500px; height:500px;">
</embed>

ActiveX 版本:添加以下 <object> 标签。

<object classid= "clsid:E61B84D6-979B-4864-91B7-B8C140B58D54" id="DWObject" CodeBase= "ImageCaptureSuite.cab#version=8,2" style ="width:500px; height:500px;">
<param name = "Manufacturer" value = "Dynamsoft Corporation"/>
<param name = "ProductName" value = "ImageCapture Suite"/>
</object>

插入以下 <object> 标签以访问和验证许可证信息。

<object classid= "clsid:5220cb21-c88d-11cf-b347-00aa00a28331" style = "display:none;">
<param name= "LPKPath" value= "ImageCaptureSuite.lpk"/>
<object>

2. 捕获图像。

初始化 ImageCapture Suite 后,我们可以调用 SDK 的方法和属性。

    if (DW_DWTSourceContainerID == "")
        DWObject.SelectSource();
    else
        DWObject.SelectSourceByIndex(document.getElementById(DW_DWTSourceContainerID).selectedIndex);
    DWObject.CloseSource();
    DWObject.OpenSource();

首先,我们可以使用 SelectSource()SelectSourceByIndex() 来获取和选择计算机上可用的源。支持的源包括扫描仪和网络摄像头驱动程序。

    if(iTwainType == 0)
    {
        DWObject.IfShowUI = document.getElementById("ShowUI").checked;

        var i;
        for(i=0;i<3;i++)
        {
            if(document.getElementsByName("PixelType").item(i).checked==true)
            DWObject.PixelType = i;
        }  
        DWObject.Resolution = Resolution.value;
        DWObject.IfFeederEnabled = document.getElementById("ADF").checked ;
        DWObject.IfDuplexEnabled = document.getElementById("Duplex").checked ;
        AppendMessage("Pixel Type: " + DWObject.PixelType + "<br />Resolution: " + DWObject.Resolution + "
");
    }
    else
    {
        DWObject.IfShowUI = document.getElementById("ShowUIForWebcam").checked;
        
        DWObject.SelectMediaTypeByIndex(document.getElementById("MediaType").selectedIndex);
        DWObject.SelectResolutionForCamByIndex(document.getElementById("ResolutionWebcam").selectedIndex);

        AppendMessage("MediaType: " + DWObject.MediaType + "
Resolution: " + DWObject.ResolutionForCam + "
");  
    }

选择源后,我们可以设置图像的属性,例如分辨率、像素类型等。扫描之前,iTwainType 用于检查所选源的类型。可以根据设备的类型(扫描仪或网络摄像头)设置不同的属性。

从选定的源获取图像。

    DWObject.IfDisableSourceAfterAcquire = true;
    DWObject.AcquireImage();

3. 将捕获的图像上传到您的数据库。

指定服务器信息,包括服务器名称、端口号以及是否使用 SSL。

    strHTTPServer = DW_ServerName;
    DWObject.HTTPPort = DW_strPort;

我们可以选择图像格式,然后将捕获的图像上传到数据库。支持的图像格式包括 BMP、PNG、JPEG、TIFF 和 PDF。在给定的示例中,您可以在网页上选择图像格式。

    var CurrentPathName = unescape(location.pathname);	// get current PathName in plain ASCII	
    var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);			
    strActionPage = CurrentPath + DW_ActionPage; //the ActionPage's file path


    var uploadfilename = txt_fileName.value + "." + document.getElementsByName("ImageType").item(i).value;
    if (strImageType == 2 && document.getElementById("MultiPageTIFF").checked) {
        if ((DWObject.SelectedImagesCount == 1) || (DWObject.SelectedImagesCount == DWObject.HowManyImagesInBuffer)) {
            DWObject.HTTPUploadAllThroughPostAsMultiPageTIFF(
                strHTTPServer,
                strActionPage,
                uploadfilename
            );
        }
        else {
            DWObject.HTTPUploadThroughPostAsMultiPageTIFF(
                strHTTPServer,
                strActionPage,
                uploadfilename
            );
        }
    }
    else if (strImageType == 4 && document.getElementById("MultiPagePDF").checked) {
        if ((DWObject.SelectedImagesCount == 1) || (DWObject.SelectedImagesCount == DWObject.HowManyImagesInBuffer)) {
            DWObject.HTTPUploadAllThroughPostAsPDF(
                strHTTPServer,
                strActionPage,
                uploadfilename
            );
        }
        else {
            DWObject.HTTPUploadThroughPostAsMultiPagePDF(
                strHTTPServer,
                strActionPage,
                uploadfilename
            );
        }
    }
    else {
        DWObject.HTTPUploadThroughPostEx(
            strHTTPServer,
            DWObject.CurrentImageIndexInBuffer,
            strActionPage,
            uploadfilename,
            strImageType
        );
    }
    DW_TempStr = DW_TempStr +"Upload: " ;
    if (DW_CheckErrorString()) {
        if(strActionPage.indexOf("SaveToFile")!=-1)
            alert(DWObject.ErrorString)//if save to file.
        else
            window.location = redirectURLifOK;
    }

操作页面 (SaveToFile.aspx) 用于接收图像数据并将数据发送到 Web 服务器或数据库。我们将在此处使用 Web 服务器作为示例。

<%@ Page Language="C#" %>
<%
    try
    {
        String strImageName;
        HttpFileCollection files = HttpContext.Current.Request.Files;
        HttpPostedFile uploadfile = files["RemoteFile"];
        strImageName = uploadfile.FileName;

        uploadfile.SaveAs(Server.MapPath(".") + "\\UploadedImages\\" + strImageName);

    }
    catch
    {
    }
%>

下载示例

完整的示例代码可以从本文中下载。如果您想首先查看这些功能,我们提供了在线演示。

ImageCapture Suite 在线演示

要自定义示例代码,您可以先从 Dynamsoft 的网站下载 SDK。

ImageCapture Suite 30 天免费试用版下载

ImageCapture Suite 的一个优点是它可以方便地与条形码阅读器和 OCR 插件集成。如果您对它们感兴趣,请查看下面的演示。

条形码阅读器和 OCR 演示

如果您有任何问题,请随时通过 support@dynamsoft.com 联系我们的支持团队。

© . All rights reserved.