Node.js条形码识别程序构建思路详解
在这篇文章中,我们将展示一个非常简单的方法构建一个自定义的结节模块,该模块封装了Dynamsoft条形码阅读器软件开发工具包,支持Windows、Linux和OS X,同时我们将演示如何集成这块模块实现一个在线的条形码读取应用。
越来越多的网开发者选择结节来构建网站,因为使用Java脚本语言来开发复杂的服务器端网应用越来越便利。为了扩展在不同平台下的结节的功能,节点允许开发者使用海关/海关来创建扩展。
介绍
Dynamsoft条形码阅读器为Windows、Linux和OS X提供条形码解析的海关/海关共享库。其最大的优势是适用于多种高级编程语言,包括JavaScript、Python、Java、Ruby、PHP等,只要可以封装碳/碳混合物作为一个扩展就可以使用。不管是什么编程语言,最终只需要简单几行代码即可完成条形码的解析。
支持1D/2D条形码类型
代码39,代码93,代码128,Codabar,交错2/5,EAN-8,EAN-13,刚果爱国者联盟-A,刚果爱国者联盟-E,工业5QRCodeDataMatrixPDF417
支持图像类型
BMP,JPEG,PNG,GIF,TIFF,PDF
运行环境
Windows、Linux MacNode 5 . 5 . 0
Node.js条形码扩展
Node.js扩展使用海关/海关编写的动态链接的共享对象。如果你没有接触过这方面的技术,可以阅读官方教程。
创建扩展
创建名为dbr.cc的文件,并添加方法去污染:
#包含节点。h #包含字符串。h #包括‘If _ DBR’。h ' # include ' barcodeformat。h ' # include ' barcodestructs。h ' # include '错误代码。h使用命名空间V8;void deca rale(const FunctionCallbackInfoValue args){ } void Init(HandleObject exports){ NODE _ SET _ METHOD(exports,' deca rale ',deca rale);}NODE_MODULE(dbr,Init)解析来自Java脚本语言传递过来的参数
隔离* isolate=isolate :3360 get current();HandleScope scope(隔离);字符串: utf 8值许可证(args[0]-ToString());字符串: utf8值FIlename(args[1]-ToString());char * pFileName=* fileNamechar * pszLicense=*许可证;_ _ int 64 llFormat=args[2]-IntegerValue();局部函数CB=局部函数:3360 cast(args[3]);解析条形码图像:
int iMaxCount=0x7FFFFFFFreader选项ro={ 0 };pBarcodeResultArray pResults=空;ro.llBarcodeFormat=llFormatro。imaxbarcodesnumperpage=IMAX计数;DBR _初始许可证;//解码条码imageint ret=DBR _ decorable(pFileName,ro,pResults);将条形码转成字符串:
const char * GetFormatStr(_ int 64格式){if(格式==CODE_39)返回CODE _ 39 ';if(格式==CODE_128)返回CODE _ 128 ';if(格式==CODE_93)返回CODE _ 93 ';if (format==CODABAR)返回CODABAR ';if(格式==ITF)返回“ITF”;if(格式==UPC_A)返回UPC _ A ';if(格式==UPC_E)返回UPC _ E ';if(格式==EAN_13)返回EAN _ 13 ';if(格式==EAN_8)返回EAN _ 8 ';if(格式==INDUSTRIAL _ 25)返回INDUSTRIAL _ 25 ';如果(格式==二维码)返回QR _ CODE ';if(格式==PDF417)返回pdf 417 ';if(格式==DATAMATRIX)返回DATAMATRIX ';返回“UNknown”;}将结果转成v8对象:
局部数组barcodeResults=数组: new(隔离);for(int I=0;我数;I){ tmp=PP条形码[一];LocalObject结果=Object:New(隔离);结果集(字符串:3360 newfroutf8(隔离、“格式”),字符串:3360 newfroutf8(隔离,GetFormatStr(tmp-llFormat));结果集(字符串:3360 newfroutf8(隔离,'值'),字符串: newfroutf8(隔离,tmp-pBarcodeData));条形码结果-集合(数字:新(分离,我),结果);}构建扩展
要求:
Windows:需要安装适用于Windows、visual Studio和Python v2.7的DBR
Linux:安装Linux操作系统的DBR .
Mac:安装DBR代表麦克和Xcode .
安装节点-gyp:
国家预防机制安装g节点-gyp
创建binding.gyp用于多平台编译:
{ ' targets ' :[{ ' target _ name ' : ' DBR ',' sources': [ 'dbr.cc' ],' conditions ' :[[' OS=' LINUX ',{ '定义: ['LINUX_DBR ',],' Include _ dirs ' :['/home/肖/dynamisoft/barcodereader 4.0/Include '],' libraries ' :['-ldynaminesoft将DRB安装目录替换成你机器上的实际目录。
配置构建环境:
节点-gyp配置
可以在苹果个人计算机上你会碰到下面的错误:
错误: xcode-select:错误:工具' xcodebuild '需要xcode,但是活动开发者目录/库/开发人员/命令行工具'是命令行工具实例
解决办法是:
sudo xcode-选择-开关/应用程序/xcode。app/目录/开发者
构建项目:
节点骗子构建
在线条形码解析
你已经成功的构建了结节的条形码解析模块,现在可以创建一个简单的条形码读取应用。
安装表达和可成型:
国家预防机制安装快速国家预防机制安装强大
使用表达创建一个简单应用:
定义变量令人生畏=require('令人生畏');var util=require(' util ');var express=require(' express ');var fs=require(' fs ');var app=express();var path=require(' path ');var dbr=require(' ./构建/发布/DBR’;var http=require(' http ');fs.readFile(' ./license.txt ',' utf8 ',函数(呃,数据){ app。使用(快递。static(_ _ dirname));app.use(函数(req,res,next){ RES . header(' Access-Control-Allow-Origin ',' *);res.header('访问控制-允许-方法、“放、贴、拿、删、选”);res.header('访问控制-允许-表头',' X-请求-有了,内容类型');res.header('访问控制-允许-凭据,真);next();});var server=app.listen(2016,function(){ var host=server。地址().地址;var port=server.address().港口;console.log('监听http://% s 3360% s ',主机,端口);});});使用可怕的从表单中提取图像数据:
app.post('/upload ',function(req,RES){ var form=new eagle .IncomingForm();form.parse(req,function(err,fields,file){ var dir=' uploads ';fs.mkdir(dir,function(err){ var flag=field。uploadflagvar barcodeType=Parseint(字段。barcodeType);console.log('flag: '标志);if (flag==='1') { //读取条码图像文件。readfile(文件。filetopload。路径、函数(错误、数据){//将文件从临时目录保存到new dirvar fileName=路径。join(_ dir)名称、目录、文件。filetopload。姓名);控制台。日志(FIlename);fs.writeFile(fileName,data,function(err){ if(err)throw err;});});} else { //读取条码图像URL var tmpFileName=路径。join(_ dirname,dir,' tmp。jpg’);var tmp=fs。create write stream(TMpfilename);var URL=field . FileToDownLoadConsole。日志(' URL : ' URL);http.get(url),function(response){ response。管道(tmp);tmp.on('finish ',function(){ tmp。close(函数(){ });});});}});});});导入条形码模块用来解析图像文件:
decadebarcode(RES、license、tmpFileName、barcodeType);
运行应用:
node server.js
访问http://localhost :2016/index。htm :
以上所述是小编给大家介绍的Node.js条形码识别程序构建思路详解,希望对大家有所帮助。
版权声明:Node.js条形码识别程序构建思路详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。