2017-04-25 6 views
0

노드의 이미지를 다운 샘플링하려고합니다. 그 이미지는 base64로 인코딩 된 문자열로 저장됩니다 (예 : "data : image/png; base64, iVBOR"등). Sharp npm 패키지를 사용하고 있습니다. 설명서는 이미지에 대한 파일 경로 또는 "inputBuffer"를 사용할 수 있다고 설명합니다. 나는 인터넷 검색을하고 Buffer 클래스가 그들이 말하는 것을 가정합니다. 아래 코드를 계속 시도하면 "입력 버퍼에 지원되지 않는 이미지 형식이 포함되어 있습니다."라는 오류가 발생합니다. 내 문제는 무엇이 될 수 있으며 확실하지 않은 경우 더 명확한 문서로 다른 npm 패키지를 추천 해 주실 수 있습니까?어떻게 Base64 문자열을 입력 버퍼로 변환합니까?

const downsizeProfileImgForTweet = (user, cb) => { 
     let imgBuffer = Buffer.from(user.profileImg, 'base64'); 
     sharp(imgBuffer) 
     .resize(52, 52) 
     .toBuffer() 
     .then(data => { 
      console.log("success"); 
      user.profileImg = data; 
      cb() 
     }) 
     .catch(err => console.log(`downisze issue ${err}`)); 
    } 

전 인터넷을 통해 들여다 보았고 많은 추측과 확인을 했으므로 멍청한 질문에 대해 용서해주십시오. 제공 할 수있는 도움에 미리 감사드립니다!

+0

'Buffer.from()'에 전달하기 전에 non-base64 헤더 데이터 (''data : image/png; base64,''부분)를 제거해야한다는 것을 잊지 않았습니까? – mscdex

+0

나는 그것을 지금 사용하지 않을 것이다 – stckoverflowaccnt12

+0

@mscdex 네, 이제 작동합니다! 고맙습니다 – stckoverflowaccnt12

답변

0

하나의 문제는 데이터 URI의 메타 데이터 ('data:image/png;base64,')가 Buffer.from()으로 전달되기 전에 제거되지 않아 이미지 데이터가 손상된다는 것입니다. base64 컨텐트 자체가 유효하다고 가정 할 때 메타 데이터를 먼저 제거하면 데이터가 올바르게 디코딩 될 수 있습니다.