Node.js 条形码识别程序构建思路详解

前端之家收集整理的这篇文章主要介绍了Node.js 条形码识别程序构建思路详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在这篇文章中,我们将展示一个非常简单的方法构建一个自定义的 Node 模块,该模块封装了Dynamsoft Barcode Reader SDK ,支持 Windows、Linux 和 OS X,同时我们将演示如何集成这块模块实现一个在线的条形码读取应用。

越来越多的 Web 开发者选择 Node 来构建网站,因为使用 JavaScript 来开发复杂的服务器端 Web 应用越来越便利。为了扩展在不同平台下的 Node 的功能,Node 允许开发者使用 C/C++ 来创建扩展。

介绍

Dynamsoft Barcode Reader 为 Windows、Linux 和 OS X 提供条形码解析的 C/C++ 共享库。其最大的优势是适用于多种高级编程语言,包括 JavaScript,Python,Java,Ruby,PHP 等,只要可以封装 C/C++ API 作为一个扩展就可以使用。不管是什么编程语言,最终只需要简单几行代码即可完成条形码的解析。

支持 1D/2D 条形码类型

Code 39,Code 93,Code 128,Codabar,Interleaved 2 of 5,EAN-8,EAN-13,UPC-A,UPC-E,Industrial 2 of 5 QRCode DataMatrix PDF417

支持图像类型

BMP,JPEG,PNG,GIF,TIFF,PDF

运行环境

Windows,Linux & Mac Node v5.5.0

Node.js 条形码扩展

Node.js 扩展使用 C/C++ 编写的动态链接的共享对象。如果你没有接触过这方面的技术,可以阅读 官方教程 。

创建扩展

创建名为 dbr.cc 的文件,并添加方法 DecodeFile:

#include #include "If_DBR.h" #include "BarcodeFormat.h" #include "BarcodeStructs.h" #include "ErrorCode.h" using namespace v8; void DecodeFile(const FunctionCallbackInfo& args) { } void Init(Handle exports) { NODE_SET_METHOD(exports,"decodeFile",DecodeFile); } NODE_MODULE(dbr,Init)

解析来自 JavaScript 传递过来的参数

ToString()); String::Utf8Value fileName(args[1]->ToString()); char *pFileName = *fileName; char *pszLicense = *license; __int64 llFormat = args[2]->IntegerValue(); Local cb = Local::Cast(args[3]);

解析条形码图像:

将条形码转成字符串:

return "UNKNOWN";
}

将结果转成 v8 对象:

barcodeResults = Array::New(isolate); for (int i = 0; i < count; i++) { tmp = ppBarcodes[i]; Local result = Object::New(isolate); result->Set(String::NewFromUtf8(isolate,"format"),String::NewFromUtf8(isolate,GetFormatStr(tmp->llFormat))); result->Set(String::NewFromUtf8(isolate,"value"),tmp->pBarcodeData)); barcodeResults->Set(Number::New(isolate,i),result); }

构建扩展

要求:

Windows: 需要安装 DBR for Windows,visual Studio,and Python v2.7.

Linux: 安装 DBR for Linux.

Mac: 安装 DBR for Mac 和 Xcode.

安装 node-gyp:

npm install -g node-gyp

创建 binding.gyp 用于多平台编译:

将 DRB 安装目录替换成你机器上的实际目录。

配置构建环境:

node-gyp configure

可以在 Mac 上你会碰到下面的错误

error: xcode-select: error: tool 'xcodebuild' requires Xcode,but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

解决办法是:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

构建项目:

node-gyp build

在线条形码解析

你已经成功的构建了 Node 的条形码解析模块,现在可以创建一个简单的条形码读取应用。

安装 Express 和 Formidable:

npm install express npm install formidable

使用 Express 创建一个简单应用:

使用 Formidable 从表单中提取图像数据:

});
});
} else { // read barcode image url
var tmpFileName = path.join(__dirname,'tmp.jpg');
var tmp = fs.createWriteStream(tmpFileName);
var url = fields.fileToDownload;
console.log('url: ' + url);
http.get(url,function(response) {
response.pipe(tmp);
tmp.on('finish',function() {
tmp.close(function() {

});
});
});
}
});
});
});

导入条形码模块用来解析图像文件

decodeBarcode(res,license,tmpFileName,barcodeType);

运行应用:

node server.js

访问 http://localhost:2016/index.htm:

以上所述是小编给大家介绍的Node.js 条形码识别程序构建思路详解,希望对大家有所帮助。

猜你在找的JavaScript相关文章