sun博客

记录点滴!

项目需要用到识别二维码,网上用windows的画布就可以实现。实际使用过程中确实可以,不过成功率很低。文末附源码。

需要以下三步:

  1. A global installation of node-gyp.
  2. GTK 2
  3. 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呢。

发表评论

邮箱地址不会被公开。 必填项已用*标注