この記事では、Dynamsoft Barcode Reader SDK をカプセル化し、Windows、Linux、および OS X をサポートするカスタム Node モジュールを構築する非常に簡単な方法を示し、これを統合する方法を示します。モジュールはオンライン バーコードを実装します。読書アプリ。
JavaScript を使用して複雑なサーバーサイド Web アプリケーションを開発することがますます便利になっているため、Web サイトの構築に Node を選択する Web 開発者がますます増えています。さまざまなプラットフォームで Node の機能を拡張するために、Node では開発者が C/C++ を使用して拡張機能を作成できるようにしています。
概要
Dynamsoft Barcode Reader は、Windows、Linux、および OS X 用のバーコード解析用の C/C++ 共有ライブラリを提供します。その最大の利点は、C/C++ API を拡張機能としてカプセル化できる限り、JavaScript、Python、Java、Ruby、PHP などのさまざまな高レベル プログラミング言語に適していることです。使用済み。プログラミング言語に関係なく、バーコードを解析するのに必要なコードは数行だけです。
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#include "If_DBR.h" #include "BarcodeFormat.h" #include "BarcodeStructs.h" #include "ErrorCode.h" using namespace v8; void DecodeFile(const FunctionCallbackInfo& args) { } void Init(Handleexports) { NODE_SET_METHOD(exports, "decodeFile", DecodeFile); } NODE_MODULE(dbr, Init)
Parse JavaScript から渡されるパラメータ
Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate); String::Utf8Value license(args[0]->ToString()); String::Utf8Value fileName(args[1]->ToString()); char *pFileName = *fileName; char *pszLicense = *license; __int64 llFormat = args[2]->IntegerValue(); Localcb = Local::Cast(args[3]);
バーコード画像を解析します:
int iMaxCount = 0x7FFFFFFF; ReaderOptions ro = {0}; pBarcodeResultArray pResults = NULL; ro.llBarcodeFormat = llFormat; ro.iMaxBarcodesNumPerPage = iMaxCount; DBR_InitLicense(pszLicense); // Decode barcode image int ret = DBR_DecodeFile(pFileName, &ro, &pResults);
は変換しますバーコードを文字列に変換:
const char * GetFormatStr(__int64 format) { if (format == CODE_39) return "CODE_39"; if (format == CODE_128) return "CODE_128"; if (format == CODE_93) return "CODE_93"; if (format == CODABAR) return "CODABAR"; if (format == ITF) return "ITF"; if (format == UPC_A) return "UPC_A"; if (format == UPC_E) return "UPC_E"; if (format == EAN_13) return "EAN_13"; if (format == EAN_8) return "EAN_8"; if (format == INDUSTRIAL_25) return "INDUSTRIAL_25"; if (format == QR_CODE) return "QR_CODE"; if (format == PDF417) return "PDF417"; if (format == DATAMATRIX) return "DATAMATRIX"; return "UNKNOWN"; }
結果を v8 オブジェクトに変換:
LocalbarcodeResults = Array::New(isolate); for (int i = 0; i < count; i++) { tmp = ppBarcodes[i]; Localresult = Object::New(isolate); result->Set(String::NewFromUtf8(isolate, "format"), String::NewFromUtf8(isolate, GetFormatStr(tmp->llFormat))); result->Set(String::NewFromUtf8(isolate, "value"), String::NewFromUtf8(isolate, tmp->pBarcodeData)); barcodeResults->Set(Number::New(isolate, i), result); }
ビルド拡張機能
要件:
Windows: DBR for Windows、visual Studio、Python v2.7 がインストールされている必要があります。
Linux: インストールLinux 用 DBR。
Mac: DBR for Mac と Xcode をインストールします。
node-gyp をインストールします:
npm install -g node-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/Dynamsoft/BarcodeReader4.0/Redist" ], 'copies': [ { 'destination': 'build/Release/', 'files': [ '/home/xiao/Dynamsoft/BarcodeReader4.0/Redist/libDynamsoftBarcodeReaderx64.so' ] }] }], ['OS=="win"', { 'defines': [ 'WINDOWS_DBR', ], 'include_dirs': [ "F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Include" ], 'libraries': [ "-lF:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Lib/DBRx64.lib" ], 'copies': [ { 'destination': 'build/Release/', 'files': [ 'F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Redist/DynamsoftBarcodeReaderx64.dll' ] }] }], ['OS=="mac"', { 'defines': [ 'MAC_DBR', ], 'include_dirs' : [ "/Applications/Dynamsoft/Barcode/ Reader/ 4.1/Include" ], 'libraries': [ "-lDynamsoftBarcodeReader" ] }] ] } ] }
DRB インストール ディレクトリをマシン上の実際のディレクトリに置き換えます。
ビルド環境を構成します:
node-gyp configure
Mac では、次のエラーが発生します:
エラー: xcode-select: エラー: ツール 'xcodebuild' には Xcode が必要ですが、アクティブな開発者ディレクトリ '/Library/Developer/CommandLineTools' はコマンド ライン ツール インスタンスです
解決策は次のとおりです:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
ビルド プロジェクト:
node-gyp build
オンライン バーコード解析
Node のバーコード解析モジュールの構築に成功し、簡単なバーコード読み取りアプリケーションを作成できるようになりました。
Express と Formidable をインストールします:
npm install Express
npm install formidable
Express を使用して簡単なアプリケーションを作成します:
var formidable = require('formidable'); var util = require('util'); var express = require('express'); var fs = require('fs'); var app = express(); var path = require('path'); var dbr = require('./build/Release/dbr'); var http = 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(); }); var server = app.listen(2016, function() { var host = server.address().address; var port = server.address().port; console.log('listening at http://%s:%s', host, port); }); });
Formidable を使用してフォームから画像データを抽出します:
app.post('/upload', function(req, res) { var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { var dir = 'uploads'; fs.mkdir(dir, function(err) { var flag = fields.uploadFlag; var barcodeType = parseInt(fields.barcodetype); console.log('flag: ' + flag); if (flag === '1') { // read barcode image file fs.readFile(files.fileToUpload.path, function(err, data) { // save file from temp dir to new dir var fileName = path.join(__dirname, dir, files.fileToUpload.name); console.log(fileName); fs.writeFile(fileName, data, function(err) { if (err) throw err; }); }); } else { // read barcode image url var tmpFileName = path.join(__dirname, dir, '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 バーコード認識プログラム構築アイデアの詳細な説明です。参考になれば幸いです。みんな。
【おすすめ関連チュートリアル】
1. JavaScript ビデオチュートリアル
2. JavaScript オンラインマニュアル
3.ブートストラップ チュートリアル