云服务与动态条码扫描器SDK的集成

随着云计算技术的不断发展,许多传统的桌面应用程序正在被转换为云应用程序。这种转变带来了许多优势,包括更好的可维护性、安全性和稳定性。用户现在可以通过网络浏览器与朋友社交、存储大量个人数据、观看实时视频、编辑文档、发布博客文章甚至编写代码。本文将探讨如何使动态条码扫描器SDKWeb技术协同工作。将看到一个基于云的条码扫描器,它由网络摄像头、支持HTML5的网络浏览器、IIS网络服务器和.NET条码阅读器SDK组成。

为什么选择Dynamsoft条码阅读器

Dynamsoft条码阅读器支持多种1D和2D条码类型,包括但不限于Code 39、Code 93、Code 128、Codabar、EAN-8、EAN-13、UPC-A、UPC-E、QRCode、DataMatrix和PDF417。它还支持多种图像类型,如BMP、JPEG、PNG、GIF、TIFF和PDF。此外,它能够检测条码信息,如条码类型、条码数量、条码值、条码原始数据、条码边界矩形、四个角的坐标和页码。

Dynamsoft条码阅读器的特点包括准确性、效率、强大的功能和灵活性。它能够在指定的图像区域内读取条码,一次性读取多个条码,并且能够读取质量差和损坏的条码。此外,它能够检测任何方向和旋转角度的条码。

Dynamsoft条码阅读器支持多种编程语言,包括C#、VB.net、Java、C++、PHP、JavaScript、Python等。

网络摄像头条码扫描器的实现

测试环境包括Microsoft Edge、Firefox、Chrome和Opera。下面是一个简单的示例代码,展示了如何在Visual Studio中创建一个新的Web项目,导入Dynamsoft.BarcodeReader.dll,并创建一个C#类BarrecodeReaderRepo来处理服务器端的条码检测。

using System; using System.Drawing; using System.IO; using Dynamsoft.Barcode; namespace BarcodeDLL { public class BarrecodeReaderRepo { private static readonly char CSep = Path.DirectorySeparatorChar; private static readonly string StrPath = AppDomain.CurrentDomain.BaseDirectory + CSep + "Images"; private static readonly string CollectFolder = StrPath + CSep + "Collect"; public static string Barcode(string strImgBase64, Int64 iformat, int iMaxNumbers, ref string strResult) { if (string.IsNullOrEmpty(strImgBase64.Trim())) throw new Exception("No barcode exist."); return DoBarcode(strImgBase64, iformat, iMaxNumbers, ref strResult); } private static string DoBarcode(string strImgBase64, Int64 format, int iMaxNumbers, ref string strResult) { strResult = ""; var strResturn = "["; var listResult = GetBarcode(strImgBase64, format, iMaxNumbers); if (listResult == null || listResult.Length == 0) { strResult = "No barcode found. "; return "[]"; // No barcode found } strResult = "Total barcode(s) found: " + listResult.Length + ""; var i = 1; foreach (var item in listResult) { strResult = strResult + " &nbspBarcode " + i + ":"; strResult = strResult + "   &nbspType: " + item.BarcodeFormat + ""; strResult = strResult + "   &nbspValue: " + item.BarcodeText + ""; strResult = strResult + "   &nbspRegion: {Left: " + item.ResultPoints[0].X + ", Top: " + item.ResultPoints[0].Y + ", Width: " + item.BoundingRect.Width + ", Height: " + item.BoundingRect.Height + "}"; i++; } strResturn = strResturn.Substring(0, strResturn.Length - 1); strResturn += "]"; return strResturn; } public static BarcodeResult[] GetBarcode(string strImgBase64, Int64 format, int iMaxNumbers) { var reader = new Dynamsoft.Barcode.BarcodeReader(); var options = new ReaderOptions { MaxBarcodesToReadPerPage = iMaxNumbers, BarcodeFormats = (BarcodeFormat)format }; reader.ReaderOptions = options; reader.LicenseKeys = "693C401F1CC972A511F060EA05D537CD"; return reader.DecodeBase64String(strImgBase64); } } }

接下来,创建一个通用处理器WebcamBarcodeReader.ashx来处理HTTP请求。解析流以获取base64字符串,然后将其传递给BarrecodeReaderRepo。

在Web页面上创建一个元素,使用HTML5 API getUserMedia打开网络摄像头。

function toggleCamera() { var videoSource = videoSelect.value; var constraints = { video: { optional: [{ sourceId: videoSource }] } }; startCamera(constraints); } function successCallback(stream) { window.stream = stream; videoElement.src = window.URL.createObjectURL(stream); videoElement.play(); } function errorCallback(error) { console.log("Error: " + error); } function startCamera(constraints) { if (navigator.getUserMedia) { navigator.getUserMedia(constraints, successCallback, errorCallback); } else { console.log("getUserMedia not supported"); } }

如何将预览图像发送到远程服务器?在隐藏的画布上持续绘制帧。将画布数据转换为base64字符串,并通过Ajax发送。如果没有检测到任何内容,使用setTimeout方法再次发送预览数据进行检测。

context.drawImage(videoElement, 0, 0, width, height); var base64 = dbrCanvas.toDataURL('image/png', 1.0); var data = base64.replace(/^data:image\/(png|jpeg|jpg);base64,/, ""); var imgData = JSON.stringify({ Base64Data: data, BarcodeType: getBarcodeFormat() }); $.ajax({ url: 'WebcamBarcodeReader.ashx', dataType: 'json', data: imgData, type: 'POST', complete: function (result) { console.log(result); if (isPaused) { return; } var barcode_result = document.getElementById('dbr'); var aryResult; aryResult = result.responseText.split('|'); if (result.responseText.indexOf("No barcode") == -1) { resetButtonGo(); barcode_result.innerHTML = result.responseText.substring(aryResult[0].length + 1); } else { barcode_result.innerHTML = result.responseText; setTimeout(scanBarcode, 200); } } });

想要尝试上述网络摄像头条码扫描器演示吗?下载Dynamic Barcode Reader的30天免费试用版,开始构建条码应用程序。

Dynamic Barcode Reader 30天免费试用

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485