没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
精华|行业资讯|编辑:胡涛|2023-11-02 11:53:32.197|阅读 20 次
概述:在本文中,您将了解如何使用基于Dynamsoft C++ Barcode SDK的 Node.js 条形码和 QR 码插件来使用 JavaScript 构建桌面和 Web 应用程序。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
有许多开源 JavaScript 条形码和 QR 码阅读器库,但适合企业使用的很少。原因是他们没有长期算法更新和维护的路线图。另外,纯JavaScript的性能也不够好。如果您追求性能,与纯 JavaScript 相比,WebAssembly 是更好的选择。尽管如此,对于使用 Node.js 进行服务器端编程来说,这还没有结束。Node.js 的底层是什么?它是C/C++。毫无疑问,使用 C++ 的 Node.js 插件具有最佳性能。在本文中,您将了解如何使用基于Dynamsoft C++ Barcode SDK的 Node.js 条形码和 QR 码插件来使用 JavaScript 构建桌面和 Web 应用程序。
该barcode4nodejs包是一个基于Dynamsoft Barcode Reader构建的 Node.js 插件。我们用它来扫描条形码和二维码。
目前,该barcode4nodejs软件包仅支持 Dynamsoft Barcode Reader 的部分 C++ API。如果功能无法满足您的需求,您可以按照以下步骤定制JavaScript API:
获取barcode4nodejs的源代码。
git clone //github.com/Dynamsoft/nodejs-barcode下载Dynamsoft C++ 条码 SDK。将头文件复制到该src文件夹,并将共享库复制到platforms该文件夹。Dynamsoft 条码读取器 SDK 支持Windows、Linux (AMD64 and ARM64)和macOS。理论上,Node.js 插件可以在所有桌面平台上运行。
Node.js 桌面应用程序
创建一个desktop.js文件。根据 的基础教程opencv4nodejs,我们可以使用无限循环来捕获网络摄像头帧并将其显示在桌面窗口中:
const cv = require('opencv4nodejs'); const vCap = new cv.VideoCapture(0); const delay = 10; while (true) { let frame = vCap.read(); if (frame.empty) { vCap.reset(); frame = vCap.read(); } cv.imshow('OpenCV Node.js', frame); const key = cv.waitKey(delay); // Press ESC to quit if (key == 27) {break;} }
但是,如果我们在循环中不断调用异步函数来解码二维码和条形码,结果回调函数将永远不会返回。setTimeout()解决方法是在检测到条形码和二维码时继续调用函数:
const dbr = require('barcode4nodejs'); const cv = require('opencv4nodejs'); dbr.initLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==") barcodeTypes = dbr.barcodeTypes const vCap = new cv.VideoCapture(0); const drawParams = { color: new cv.Vec(0, 255, 0), thickness: 2 } const fontFace = cv.FONT_HERSHEY_SIMPLEX; const fontScale = 0.5; const textColor = new cv.Vec(255, 0, 0); const thickness = 2; results = null; function getframe() { let img = vCap.read(); dbr.decodeBufferAsync(img.getData(), img.cols, img.rows, img.step, barcodeTypes, function (err, msg) { results = msg }, "", 1); cv.imshow('Webcam', img); const key = cv.waitKey(10); // Press ESC to quit if (key != 27) { setTimeout(getframe, 30); } } getframe()
在下面的代码中,我们使用 OpenCV API 绘制叠加层,显示检测到的条形码和二维码的文本和边框。由于相邻帧的相似性,我们不需要同步绘制帧及其对应的结果。一点点延迟是可以接受的。
if (results != null) { for (index in results) { let result = results[index]; let upperLeft = new cv.Point(result.x1, result.y1); let bottomLeft = new cv.Point(result.x2, result.y2); let upperRight = new cv.Point(result.x3, result.y3); let bottomRight = new cv.Point(result.x4, result.y4); img.drawLine(upperLeft, bottomLeft, drawParams); img.drawLine(bottomLeft, upperRight, drawParams); img.drawLine(upperRight, bottomRight, drawParams); img.drawLine(bottomRight, upperLeft, drawParams); img.putText(result.value, new cv.Point(result.x1, result.y1 + 10), fontFace, fontScale, textColor, thickness); } }
创建一个web.js文件,在其中添加以下代码来启动 Web 服务器:
var fs=require("fs"); var html = fs.readFileSync("index.htm", "utf8"); var server = http.createServer(function (req, res) { if (req.url.startsWith("/image")) { res.writeHead(200, { 'Content-Type': 'image/jpeg' }); res.write(img); res.end(); } else { res.writeHead(200, { 'Content-Type': 'text/html' }); res.write(html); res.end(); } }); server.listen(2020); console.log('Node.js web server is running at port 2020...')
将中使用的代码复制desktop.js到web.js. 我们不使用cv.imshow()在桌面窗口中显示网络摄像头图像,而是使用res.write()将图像数据发送到网络客户端。
下一步是创建一个 HTML 页面来显示图像数据:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="//www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Webcam</title> </head> <body> <img id="image" width="960" /> <script type="text/javascript"> var image = document.getElementById('image'); function refresh() { image.src = "/image?" + new Date().getTime(); image.onload= function(){ setTimeout(refresh, 30); } } refresh(); </script> </body> </html>
没有使用高级 HTML5 API,而是使用图像元素。因此,Web 应用程序与任何 Web 浏览器 100% 兼容。
现在我们可以使用 Node.js 运行服务器端条形码和二维码扫描应用程序。
node web.js
这是Microsoft Internet Explorer的屏幕截图。
源代码://github.com/yushulx/nodejs-barcode-reader
欢迎下载|体验更多Dynamsoft产品
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@wqylolg.cn
GLG Toolkit 是一个功能强大的图形工具包,专为构建实时数据可视化和人机界面(HMI)/监控与数据采集(SCADA)应用而设计。 它提供了灵活的图形框架,支持多种编程语言和平台,包括 C/C++、Java、C#/.NET、JavaScript、React、Angular、Next.js 等,适用于 Windows、Linux、Unix、嵌入式系统和 Web/Mobile 环境。以下将对
达索系统官方授权代理 | 22年服务经验 | 西南片区企业专属技术支持
本文将深入探讨QtitanRibbon与Qt之间的紧密关系,分析它们如何相互增强,并通过具体应用案例展示其实际价值。
达索系统官方授权代理 | 21年服务经验 | 西南片区企业专属技术支持
Dynamsoft Barcode Reader SDK是一款多功能的条码读取控件。
Dynamsoft Camera SDK为你的应用程序提供支持,将iPhone或Android手机变成文档扫描仪
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@wqylolg.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢