Node.js 바코드 인식 프로그램 구축 아이디어에 대한 자세한 설명

PHPz
풀어 주다: 2018-10-13 17:12:12
원래의
1736명이 탐색했습니다.

이 기사에서는 Dynamsoft Barcode Reader SDK를 캡슐화하고 Windows, Linux 및 OS X를 지원하는 사용자 정의 Node 모듈을 구축하는 매우 간단한 방법을 보여주고, 이를 통합하는 방법을 보여줍니다. 모듈은 온라인 바코드를 구현합니다. 독서신청.

복잡한 서버 측 웹 애플리케이션을 개발하기 위해 JavaScript를 사용하는 것이 점점 더 편리해지고 있기 때문에 점점 더 많은 웹 개발자가 웹 사이트 구축을 위해 Node를 선택하고 있습니다. 다양한 플랫폼에서 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/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: Windows용 DBR, Visual Studio 및 Python v2.7이 설치되어 있어야 합니다.

Linux: 설치 Linux용 DBR.

Mac: Mac 및 Xcode용 DBR을 설치합니다.

node-gyp 설치:

npm install -g node-gyp

만들기 다중 플랫폼 컴파일을 위한 바인딩.gyp:

{
"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"
]
}]
]
}
]
}
로그인 후 복사

DRB 설치 디렉터리를 컴퓨터의 실제 디렉터리로 바꿉니다.

빌드 환경 구성:

node-gyp 구성

Mac에서는 다음 오류가 발생합니다.

오류: xcode-select: 오류: 도구 'xcodebuild'에는 Xcode가 필요하지만 활성 개발자 디렉토리 '/Library/Developer/CommandLineTools'는 명령줄 도구 인스턴스입니다

해결책은 다음과 같습니다.

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

빌드 프로젝트:

node-gyp 빌드

온라인 바코드 구문 분석

Node의 바코드 구문 분석 모듈을 성공적으로 구축했으며 이제 간단한 바코드 판독 애플리케이션을 만들 수 있습니다.

Express 및 Formidable 설치:

npm install express
npm install formidable

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);
});
});
로그인 후 복사

Formidable을 사용하여 양식에서 이미지 데이터를 추출합니다.

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

});
});
});
}
});
});
});
로그인 후 복사

바코드 모듈을 가져와 이미지 파일을 구문 분석합니다.

decodeBarcode(res, 라이센스, tmpFileName, 바코드 유형);

애플리케이션 실행:

node server.js

접속 http: //localhost:2016/index.htm:

위는 편집자가 소개한 Node.js 바코드 인식 프로그램 구축 아이디어에 대한 자세한 설명입니다. 모든 사람.

【관련 추천 튜토리얼】

1. JavaScript 동영상 튜토리얼
2. JavaScript 온라인 매뉴얼
3. 부트스트랩 튜토리얼

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!