2017-12-28 11 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); 
     }) 
    } 
}