


Detaillierte Erläuterung der Konstruktionsideen des Node.js-Barcode-Erkennungsprogramms
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)
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]);
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);
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"; }
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); }
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": [ { '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" ] }] ] } ] }
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('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); }); });
Verwenden Sie Formidable, um Bilddaten aus dem Formular zu extrahieren:
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() { }); }); }); } }); }); });
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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Speichers und Garbage Collectors (GC) der NodeJS V8-Engine. Ich hoffe, er wird Ihnen hilfreich sein!

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Die Auswahl eines Docker-Images für Node mag trivial erscheinen, aber die Größe und potenziellen Schwachstellen des Images können erhebliche Auswirkungen auf Ihren CI/CD-Prozess und Ihre Sicherheit haben. Wie wählen wir also das beste Node.js-Docker-Image aus?

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Node 19 wurde offiziell veröffentlicht. Dieser Artikel wird Ihnen eine detaillierte Erklärung der 6 Hauptfunktionen von Node.js 19 geben. Ich hoffe, er wird Ihnen hilfreich sein!

Wie führt Node.js GC (Garbage Collection) durch? Der folgende Artikel führt Sie durch.

Die Ereignisschleife ist ein grundlegender Bestandteil von Node.js und ermöglicht die asynchrone Programmierung, indem sie sicherstellt, dass der Hauptthread nicht blockiert wird. Das Verständnis der Ereignisschleife ist für die Erstellung effizienter Anwendungen von entscheidender Bedeutung. Der folgende Artikel wird Ihnen ein detailliertes Verständnis der Ereignisschleife in Node vermitteln. Ich hoffe, er wird Ihnen hilfreich sein!

Wie packe ich die ausführbare Datei von nodejs mit pkg? Im folgenden Artikel erfahren Sie, wie Sie mit pkg ein Node-Projekt in eine ausführbare Datei packen. Ich hoffe, dass er Ihnen weiterhilft!
