当前位置: 首页 > 后端技术 > Node.js

构建一个基于Node.js的条码识别程序

时间:2023-04-03 15:18:45 Node.js

在本文中,我们将展示一种非常简单的方法来构建一个自定义的Node模块,该模块封装了DynamsoftBarcodeReaderSDK并支持Windows、Linux和OSX,我们将演示如何集成该模块实现在线条码阅读应用。越来越多的Web开发人员选择Node来构建网站,因为使用JavaScript开发复杂的服务器端Web应用程序越来越方便。为了扩展Node在不同平台下的功能,Node允许开发者使用C/C++来创建扩展。介绍DynamsoftBarcodeReader为Windows、Linux和OSX提供条码解析的C/C++共享库。它最大的优点是适用于多种高级编程语言,包括JavaScript、Python、Java、Ruby、PHP、等等,只要能将C/C++API封装为扩展即可。无论使用何种编程语言,只需几行代码即可完成对条码的解析。支持一维/二维条码类型Code39、Code93、Code128、Codabar、Interleaved2of5、EAN-8、EAN-13、UPC-A、UPC-E、Industrial2of5QRCodeDataMatrixPDF417支持图像类型、BMP、JPEG,PNG,GIF,TIFF,PDFRuntimeWindows,Linux&MacNode.js条码扩展Node.js扩展使用用C/C++编写的动态链接共享对象。如果你没有接触过这项技术,可以阅读官方教程。创建一个扩展创建一个名为dbr.cc的文件并添加DecodeFile方法:#include#include#include"If_DBR.h"#include"BarcodeFormat.h"#include"BarcodeStructs.h"#include"ErrorCode.h"usingnamespacev8;voidDecodeFile(constFunctionCallbackInfo&args){}//这里推荐一个前端全栈开发交流圈:619586920突破技术瓶颈,提升思维能力voidInit(Handleexports){NODE_SET_METHOD(exports,"decodeFile",DecodeFile);}NODE_MODULE(dbr,Init)解析JavaScript传入的参数Isolate*isolate=Isolate::GetCurrent();HandleScopescope(isolate);String::Utf8Valuelicense(args[0]->ToString());String::Utf8ValuefileName(args[1]->ToString());char*pFileName=*fileName;char*pszLicense=*license;__int64llFormat=args[2]->IntegerValue();Localcb=Local::Cast(args[3]);解析条码图像:intiMaxCount=0x7FFFFFFF;ReaderOptionsro={0};pBarcodeResultArraypResults=NULL;ro.llBarcodeFormat=llFormat;ro.iMaxBarcodesNumPerPage=iMaxCount;Dbr_initlicense(pszlicense);//解释条形码imageIntret=dbr_decodefile(pfilename,&ro&&persults);将将将将条形码形码形码:constchar*getformater*getformatstr(____int64格式)如果(格式==CODE_128)返回“CODE_128”;如果(格式==CODE_93)返回“CODE_93”;if(format==CODABAR)返回“CODABAR”;如果(格式==ITF)返回“ITF”;如果(格式==UPC_A)返回“UPC_A”;如果(格式==UPC_E)返回“UPC_E”;如果(格式==EAN_13)返回“EAN_13”;如果(格式==EAN_8)返回“EAN_8”;如果(格式==INDUSTRIAL_25)返回“INDUSTRIAL_25”;如果(格式==QR_CODE)返回“QR_CODE”;如果(格式==PDF417)返回“PDF417”;if(format==DATAMATRIX)返回“DATAMATRIX”;return"UNKNOWN";}将结果转成v8对象:LocalbarcodeResults=Array::New(isolate);for(int=0;i结果=Object::New(isolate);结果->Set(String::NewFromUtf8(isolate,"format"),String::NewFromUtf8(isolate,GetFormatStr(tmp->llFormat)));结果->Set(String::NewFromUtf8(isolate,"value"),String::NewFromUtf8(isolate,tmp->pBarcodeData));barcodeResults->Set(Number::New(isolate,i),result);}//这里推荐一个前端全栈开发交流圈:619586920突破技术瓶颈,提升思维能力,构建扩展需求:Windows:需要为Windows、VisualStudio和Python安装DBR。Linux:为Linux安装DBR。Mac:为Mac和Xcode安装DBR。安装node-gyp:npminstall-gnode-gyp为多平台编译创建binding.gyp:{"targets":[{'target_name':"dbr",'sources':["Dbr.cc"],'Conditions':[['OS=="Linux"',{'defines':['linux_dbr',],'Include_dirs':["/Home/Xiao/Dynamsoft/BarcodeReader4.0/Include"],'libraries':["-lDynamsoftBarcodeReaderx64","-L/home/xiao/dynamoft/barcodereader4.0/redist“],'copies':[{'destination':'build/reparter/','files':['/home/xiao/dynamsoft/barcodereader4.0/redist/libdynamsoftbarcodereaderx64.so']}]}]}},['os==“win”',{'defines':['windows_dbr',],'include_dirs':[f:/programfiles(x86)阅读器4.1/组件/c_c++/include“],'libraries':[“-lf:/program文件(x86)/dynamsoft/barcodereader4.1/components/c_c++++/lib/dbrx64.lib”{'destination':'build/release/','files':['f:/program文件(x86)/dynamsoft/barcodereader4.1/components/c_c++/redist/redist/redist/dynamsoftbarcodereaderx64.dll']}]}],['操作系统==“马c“',{'defines':['mac_dbr',],'include_dirs':[“/applications/dynamysoft/barcode/barcode/reader/4.1/incled”],'libraries':[-ldynamsoftbarcodereader'}]]}//这里推荐一个前端全栈开发交流圈:619586920,突破技术瓶颈,提升思维能力]}将DRB安装目录替换成自己机器上的实际目录配置构建环境:node-gypconfigure在Mac上你会遇到如下错误:error:xcodeselect:error:tool'xcodebuild'requiresXcode,butactivedeveloperdirectory'/Library/Developer/CommandLineTools'isacommandlinetoolsinstance解决方法是:sudoxcode-select--switch/Applications/Xcode.app/Contents/Developer构建项目:node-gyp构建在线条码分析您已经成功构建了Node的条码分析模块,现在您可以创建一个简单的条码阅读应用程序。安装Express和Formidable:npminstallexpressnpminstallformidable使用Express创建一个简单的应用:varformidable=require('formidable');varutil=require('util');varexpress=require('express');varfs=require('fs');varapp=express();varpath=require('path');vardbr=require('./build/Release/dbr');varhttp=require('http');fs.readFile('./license.txt',utf8',function(err,data){app.use(express.static(__dirname));app.use(function(req,res,next){res.header("Access-Control-Allow-Origin","*");res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");res.header("Access-Control-Allow-Headers","X-Requested-With,content-type");res.header("Access-Control-Allow-Credentials",true);next();});varserver=app.listen(2019,function(){varhost=server.address().address;varport=server.address().port;console.log('在http://%s:%s监听',host,port);});});使用Formidable从表格中提取图像数据:app.post('/upload',function(req,res){varform=newformidable.IncomingForm();form.parse(req,function(err,fields,files){vardir='上传';fs.mkdir(dir,function(err){varflag=fields.uploadFlag;varbarcodeType=parseInt(fields.barcodetype);console.log('flag:'+flag);if(flag==='1'){//读取条码图像文件fs.readFile(files.fileToUpload.path,function(err,data){//保存文件从临时目录到新目录varfileName=path.join(__dirname,dir,files.fileToUpload.name);console.log(fileName);fs.writeFile(fileName,data,function(err){err)if(;});});}else{//读取条形码图像urlvartmpfileName=path.join(__dirname,dir,dir,'tmp.jpg');vartmp=fs.createwritestream(tmpfilename);console.log('url:'+url);http.get(url,function(response){response.pipe(TMP);tmp.on('Finish',function(){tmp.close(function(){});});}//这里我推荐一个前端全栈开发交流圈:619586920突破技术瓶颈,提升思维能力});});});导入条码模块解析图片文件:decodeBarcode(res,license,tmpFileName,barcodeType);运行应用:nodeserver.js访问http://localhost:2019/index.htm:如果你想在下面构建一个条码读取应用Windows、Linux和Mac,您可以直接下载示例程序DynamsoftBarcodeReader,也可以直接咨询support@dynamsoft.com。这次给大家推荐一个免费学习圈,里面总结了移动应用网站开发,css,html,webpack,vuenodeangular和面试资源获取资料???对web开发技术感兴趣的同学,欢迎加裙子:???582735936???,不管你是小白还是大牛我都欢迎。还有大牛整理的一套高效学习路线和教程免费分享给大家,每天更新视频资料。最后祝大家早日学业有成,拿到满意的offer,快速升职加薪,走上人生巅峰。