2017-04-25 107 views
0

我正在尝试缩减节点中的图像。我把这个图像存储为base64编码的字符串(即:“data:image/png; base64,iVBOR”等)。我正在使用Sharp npm软件包。该文档似乎描述了sharp可以将文件路径转换为图像或“inputBuffer”。我做了一些Google搜索,并假设他们指的是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}`)); 
    } 

我看遍了整个互联网,做了一堆猜测和检查,所以原谅我的noob问题。预先感谢您提供的任何帮助!

+0

您是否记得在传递给'Buffer.from()'之前首先剥离非base64头部数据(''data:image/png; base64'''部分)? – mscdex

+0

我不会现在就试试这个 – stckoverflowaccnt12

+0

@mscdex是的现在它的工作原理!谢谢 – stckoverflowaccnt12

回答

0

一个问题是数据URI中的元数据('data:image/png;base64,')在传递到Buffer.from()之前没有被剥离,导致图像数据被破坏。假设base64内容本身有效,首先删除元数据应允许数据正确解码。

相关问题