项目需要用到识别二维码,网上用windows的画布就可以实现。实际使用过程中确实可以,不过成功率很低。文末附源码。
需要以下三步:
- A global installation of node-gyp.
- GTK 2
- For optional JPEG support (node-canvas 2.0 and later): libjpeg-turbo
要安装node-gyp,首先要安装windows-build-tools,会下载python和vs。如果长期没有反应,中止掉,根据下载文件目录,打开手动安装。
npm install --global windows-build-tools //执行这条命令会去下载以上的python和vs_biuidTools.exe
对应的所有文件放到文章末百度网盘中。
1,gtk+-bundle_2.22.1-20101229_win64.zip解压到c盘的GTK文件夹中,注意是“解压到当前文件夹”。
2,安装libjpeg-turbo-2.0.0-vc64.exe,安装到 c盘下的libjpeg-turbo64文件夹中。
3, 安装python2.7.15,安装完成后在系统变量中添加“NODE_GYP_FORCE_PYTHON”变量。
4,安装vs_BuildTools.exe,由于是2017版的,选择 Visual C++ build tools 。安装,需要大概4g左右存储。
5,安装node-gyp
npm install -g node-gyp
6,安装canvas
npm install canvas -S
7,等待安装完成
Install Visual C++ Build Environment: Visual Studio Build Tools (using “Visual C++ build tools” if using a version older than VS2019, otherwise use “Desktop development with C++” workload) or Visual Studio Community (using the “Desktop development with C++” workload)
以下为参考链接
https://github.com/Automattic/node-canvas/wiki/Installation:-Windows#pango
https://github.com/nodejs/node-gyp#on-windows
链接:https://pan.baidu.com/s/1C8L7J2XPAsVNxsuqSmYXKw?pwd=ly9r
提取码:ly9r
文件名:.windows-build-tools.zip
以下为使用canvas源码,部分二维码测试成功,但感觉和jimp成功率没什么区别,都不高。
async function qr(url){
const image = await loadImage(url)
let {width,height}=image
console.log(width,height)
const canvas = createCanvas(width, height)
const ctx = canvas.getContext('2d')
ctx.drawImage(image, 0, 0, width, height)
var data = ctx.getImageData(0, 0, width, height);
let qrcode = new qrCode();
qrcode.callback = function(err, value) {
if (err) {
console.error(err);
// reject(err.message)
}
// Printing the decrypted value
console.log(value.result);
if(value){
// resolve(value.result)
}
};
// Decoding the QR code
qrcode.decode(data);
/* return new Promise((resolve,reject)=>{
//var Jimp = require("jimp");
// Parse the image using Jimp.read() method
Jimp.read(buffer, function(err, image) {
if (err) {
console.error(err);
reject(err.message)
}
// Creating an instance of qrcode-reader module
console.log(image)
qrcode.callback = function(err, value) {
if (err) {
console.error(err);
reject(err.message)
}
// Printing the decrypted value
console.log(value);
if(value){
resolve(value.result)
}
};
// Decoding the QR code
qrcode.decode(image.bitmap);
});
})*/
}
网上有说用@zxing/library库的,弄了好久,就没成功过,看来识别二维码,要想准确率高的,不能用nodejs呢。