Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Erläuterung der Konstruktionsideen des Node.js-Barcode-Erkennungsprogramms

PHPz
Freigeben: 2018-10-13 17:12:12
Original
1740 Leute haben es durchsucht

In diesem Artikel zeigen wir eine sehr einfache Methode zum Erstellen eines benutzerdefinierten Node-Moduls, das das Dynamsoft Barcode Reader SDK kapselt, Windows, Linux und OS X unterstützt, und wir zeigen, wie dieses integriert wird. Das Modul implementiert einen Online-Barcode Leseanwendung.

Immer mehr Webentwickler entscheiden sich für Node zum Erstellen von Websites, da es immer bequemer wird, JavaScript zum Entwickeln komplexer serverseitiger Webanwendungen zu verwenden. Um die Funktionalität von Node auf verschiedenen Plattformen zu erweitern, ermöglicht Node Entwicklern die Erstellung von Erweiterungen mit C/C++.

Einführung

Dynamsoft Barcode Reader bietet eine gemeinsam genutzte C/C-Bibliothek für die Barcode-Analyse für Windows, Linux und OS X. Sein größter Vorteil besteht darin, dass es für eine Vielzahl höherer Programmiersprachen geeignet ist, einschließlich JavaScript, Python, Java, Ruby, PHP usw., solange die C/C-API als Erweiterung gekapselt werden kann gebraucht. Unabhängig von der Programmiersprache sind nur wenige Codezeilen erforderlich, um den Barcode zu analysieren.

Unterstützung von 1D/2D-Barcodetypen

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

Unterstützte Bildtypen

BMP, JPEG, PNG, GIF , TIFF, PDF

Laufumgebung

Windows, Linux & Mac
Node v5.5.0

Node.js Barcode-Erweiterung

Node.js erweitert dynamisch verknüpfte gemeinsame Objekte, die in C/C geschrieben sind. Wenn Sie noch nicht mit dieser Technologie vertraut sind, können Sie das offizielle Tutorial lesen.

Erstellen Sie eine Erweiterung

Erstellen Sie eine Datei mit dem Namen dbr.cc und fügen Sie die Methode DecodeFile hinzu:

#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)
Nach dem Login kopieren

Parse Von JavaScript übergebene Parameter

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]);
Nach dem Login kopieren

Das Barcode-Bild analysieren:

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);
Nach dem Login kopieren

wird konvertiert Barcode in Zeichenfolge:

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";
}
Nach dem Login kopieren

Konvertieren Sie das Ergebnis in ein v8-Objekt:

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);
}
Nach dem Login kopieren

Build-Erweiterung

Anforderungen:

Windows: Erfordert die Installation von DBR für Windows, Visual Studio und Python v2.7.

Linux: Installieren DBR für Linux.

Mac: DBR für Mac und Xcode installieren.

Node-gyp installieren:

npm install -g node-gyp

Erstellen binding.gyp für die plattformübergreifende Kompilierung:

{
"targets": [
{
&#39;target_name&#39;: "dbr",
&#39;sources&#39;: [ "dbr.cc" ],
&#39;conditions&#39;: [
[&#39;OS=="linux"&#39;, {
&#39;defines&#39;: [
&#39;LINUX_DBR&#39;,
],
&#39;include_dirs&#39;: [
"/home/xiao/Dynamsoft/BarcodeReader4.0/Include"
],
&#39;libraries&#39;: [
"-lDynamsoftBarcodeReaderx64", "-L/home/xiao/Dynamsoft/BarcodeReader4.0/Redist"
],
&#39;copies&#39;: [
{
&#39;destination&#39;: &#39;build/Release/&#39;,
&#39;files&#39;: [
&#39;/home/xiao/Dynamsoft/BarcodeReader4.0/Redist/libDynamsoftBarcodeReaderx64.so&#39;
]
}]
}],
[&#39;OS=="win"&#39;, {
&#39;defines&#39;: [
&#39;WINDOWS_DBR&#39;,
],
&#39;include_dirs&#39;: [
"F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Include"
],
&#39;libraries&#39;: [
"-lF:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Lib/DBRx64.lib"
],
&#39;copies&#39;: [
{
&#39;destination&#39;: &#39;build/Release/&#39;,
&#39;files&#39;: [
&#39;F:/Program Files (x86)/Dynamsoft/Barcode Reader 4.1/Components/C_C++/Redist/DynamsoftBarcodeReaderx64.dll&#39;
]
}]
}],
[&#39;OS=="mac"&#39;, {
&#39;defines&#39;: [
&#39;MAC_DBR&#39;,
],
&#39;include_dirs&#39; : [
"/Applications/Dynamsoft/Barcode/ Reader/ 4.1/Include"
],
&#39;libraries&#39;: [
"-lDynamsoftBarcodeReader"
]
}]
]
}
]
}
Nach dem Login kopieren

Ersetzen Sie das DRB-Installationsverzeichnis durch das tatsächliche Verzeichnis auf Ihrem Computer.

Konfigurieren Sie die Build-Umgebung:

node-gyp configure

Auf dem Mac wird der folgende Fehler auftreten:

Fehler: xcode-select: Fehler: Tool „xcodebuild“ erfordert Xcode, aber das aktive Entwicklerverzeichnis „/Library/Developer/CommandLineTools“ ist eine Instanz von Befehlszeilentools

Die Lösung lautet:

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

Projekt erstellen:

node-gyp build

Online-Barcode-Parsing

Sie haben das Barcode-Parsing-Modul von Node erfolgreich erstellt und können nun eine einfache Barcode-Leseanwendung erstellen.

Express und Formidable installieren:

npm install express
npm install formidable

Erstellen Sie eine einfache Anwendung mit Express:

var formidable = require(&#39;formidable&#39;);
var util = require(&#39;util&#39;);
var express = require(&#39;express&#39;);
var fs = require(&#39;fs&#39;);
var app = express();
var path = require(&#39;path&#39;);
var dbr = require(&#39;./build/Release/dbr&#39;);
var http = require(&#39;http&#39;);
fs.readFile(&#39;./license.txt&#39;, &#39;utf8&#39;, 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(&#39;listening at http://%s:%s&#39;, host, port);
});
});
Nach dem Login kopieren

Verwenden Sie Formidable, um Bilddaten aus dem Formular zu extrahieren:

app.post(&#39;/upload&#39;, function(req, res) {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
var dir = &#39;uploads&#39;;
fs.mkdir(dir, function(err) {
var flag = fields.uploadFlag;
var barcodeType = parseInt(fields.barcodetype);
console.log(&#39;flag: &#39; + flag);
if (flag === &#39;1&#39;) { // 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, &#39;tmp.jpg&#39;);
var tmp = fs.createWriteStream(tmpFileName);
var url = fields.fileToDownload;
console.log(&#39;url: &#39; + url);
http.get(url, function(response) {
response.pipe(tmp);
tmp.on(&#39;finish&#39;, function() {
tmp.close(function() {

});
});
});
}
});
});
});
Nach dem Login kopieren

Importieren Sie das Barcode-Modul, um die Bilddatei zu analysieren:

decodeBarcode(res, License, tmpFileName, barcodeType);

Führen Sie die Anwendung aus:

node server.js

Zugriff auf http: //localhost:2016/index.htm:

Das Obige ist eine detaillierte Erläuterung der vom Herausgeber vorgestellten Idee zum Aufbau des Node.js-Barcode-Erkennungsprogramms alle.

【Empfohlene verwandte Tutorials】

1. JavaScript-Video-Tutorial
2. JavaScript-Online-Handbuch
Bootstrap-Tutorial

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage