2017-12-28 52 views
1

QRコードを含むbase64で画像を受け取り、16桁の英数字の文字列を返すバックエンドのNode.jsエンドポイントがあります。 (私はqrcode-readerパッケージを使用しています)QRコードを読み取る - base64画像の高さと幅

しかし、私は幅と高さの画像バッファを渡す必要があるというエラーが発生しました。 npmのイメージパッケージの多くが.pngまたは.jpg形式のファイルで動作するので、base64イメージ文字列からどのように幅と高さを得ることができるのかよく分かりません。

Base64で画像の幅と高さをどのように取得できるかについてのご意見はありますか?

function readQR(){ 
    return function(req, res){ 
     // Load base64 image 
     var base64Image = req.body.image; 
     var decodedImg = decodeBase64Image(base64Image); 
     var imageBuffer = decodedImg.data; 
     qr.callback = function(err, result){ 
      if(err) console.log(err); 
      // Regex check whether it is 16 letter alphanumeric 
      if(/^(\w{16,16})$/.test(result)) res.json(result); 
      else res.json({ 
       error: 'Invalid dmac address' 
      }) 
     } 
     qr.decode(imageBuffer); 
    } 
} 

答えて

0

これを行う最も簡単な方法は、base64をファイルに戻してバッファを読み取ることです。以下のコードを使用してqrコードを正常に読み取ることができました。

function readQR(){ 
    return function(req, res, next){ 

     var base64Image = req.body.image; // Load base64 image 
     var decodedImg = decodeBase64Image(base64Image); 
     var imageBuffer = new Buffer(decodedImg.data, 'base64'); 

     fs.writeFileSync(path.join(__dirname, '../', '/temp/image.jpg'), imageBuffer, {encoding: 'base64'}, function(err){ 
      if(err) console.log(err); 
     }); 
     var buffer = fs.readFileSync(path.join(__dirname, '../', '/temp/image.jpg')); 

     Jimp.read(buffer, function(error, image){ 
      if(error) console.log(error); 
      qr.callback = function(err, value){ 
       if(err) console.log(err); 
       console.log(value); 
       if(/^(\w{16,16})$/.test(value.result)) res.json({dmac: value.result}); 
       else res.json({ 
        error: 'Invalid dmac address' 
       }) 
      }; 
      qr.decode(image.bitmap); 
     }) 
    } 
} 
関連する問題