Rumah  >  Artikel  >  hujung hadapan web  >  Penjelasan terperinci tentang idea pembinaan program pengecaman kod bar Node.js

Penjelasan terperinci tentang idea pembinaan program pengecaman kod bar Node.js

PHPz
PHPzasal
2016-05-16 15:15:551697semak imbas

Dalam artikel ini, kami akan menunjukkan kaedah yang sangat mudah untuk membina modul Node tersuai, yang merangkum Dynamsoft Barcode Reader SDK, menyokong Windows, Linux dan OS X, dan kami akan menunjukkan cara untuk menyepadukan ini Modul ini melaksanakan kod bar dalam talian aplikasi bacaan.

Semakin ramai pembangun web memilih Node untuk membina tapak web kerana semakin mudah untuk menggunakan JavaScript untuk membangunkan aplikasi web sebelah pelayan yang kompleks. Untuk memanjangkan fungsi Node pada platform yang berbeza, Node membenarkan pembangun membuat sambungan menggunakan C/C++.

Pengenalan

Dynamsoft Barcode Reader menyediakan perpustakaan kongsi C/C untuk penghuraian kod bar untuk Windows, Linux dan OS X. Kelebihan terbesarnya ialah ia sesuai untuk pelbagai bahasa pengaturcaraan peringkat tinggi, termasuk JavaScript, Python, Java, Ruby, PHP, dll., selagi C/C API boleh dirangkumkan sebagai sambungan, ia boleh digunakan. Tanpa mengira bahasa pengaturcaraan, ia hanya memerlukan beberapa baris kod untuk menghuraikan kod bar.

Sokong jenis kod bar 1D/2D

Kod 39, Kod 93, Kod 128, Codabar, Berjalin 2 daripada 5, EAN-8, EAN-13, UPC- A, UPC-E,Industrial 2 daripada 5
QRCode
DataMatrix
PDF417

Jenis imej yang disokong

BMP, JPEG, PNG, GIF , TIFF, PDF

Persekitaran berjalan

Windows, Linux & Mac
Node v5.5.0

sambungan kod bar Node.js

Node.js memanjangkan objek kongsi yang dipautkan secara dinamik yang ditulis dalam C/C. Jika anda belum didedahkan dengan teknologi ini, anda boleh membaca tutorial rasmi.

Buat sambungan

Buat fail bernama dbr.cc dan tambah kaedah DecodeFail:

#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 Parameter diluluskan daripada 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]);

Parsing imej kod bar:

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);

akan Menukar kod bar kepada rentetan:

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";
}

Tukar hasil kepada objek 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);
}

Pelanjutan Binaan

Keperluan:

Windows: Memerlukan DBR untuk Windows, Visual Studio dan Python v2.7 untuk dipasang.

Linux: Pasang DBR untuk Linux.

Mac: Pasang DBR untuk Mac dan Xcode.

Pasang node-gyp:

npm install -g node-gyp

Buat binding.gyp untuk kompilasi berbilang platform:

{
"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"
]
}]
]
}
]
}

Ganti direktori pemasangan DRB dengan direktori sebenar pada mesin anda.

Konfigurasikan persekitaran binaan:

konfigurasi nod-gyp

Pada Mac anda akan menghadapi ralat berikut:

ralat: xcode-select: error: tool 'xcodebuild' memerlukan Xcode, tetapi direktori pembangun aktif '/Library/Developer/CommandLineTools' ialah contoh alatan baris arahan

Penyelesaiannya ialah:

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

Bina projek:

node-gyp bina

Penghuraian kod bar dalam talian

Anda telah berjaya membina modul penghuraian kod bar Node dan kini boleh mencipta aplikasi membaca kod bar ringkas.

Pasang Express and Formidable:

npm install express
npm install formidable

Buat aplikasi mudah menggunakan 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);
});
});

Gunakan Formidable untuk mengekstrak data imej daripada borang:

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() {

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

Import modul kod bar untuk menghuraikan fail imej:

nyahkodBarcode(res, license, tmpFileName, barcodeType);

Jalankan aplikasi:

nod server.js

Akses http: //localhost:2016/index.htm:

Di atas ialah penjelasan terperinci tentang idea pembinaan program pengecaman kod bar Node.js yang diperkenalkan oleh editor semua orang.

【Tutorial berkaitan yang disyorkan】

1 Tutorial video JavaScript
2 Manual dalam talian JavaScript
3 tutorial bootstrap

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn