我试图在节点中对图像进行下采样。我将该图像存储为base64编码的字符串(即:"数据:image / png; base64,iVBOR"等等)。我使用Sharp npm包。文档似乎描述了锐利可以将文件路径带到图像或" inputBuffer。"我做了一些谷歌搜索并假设Buffer类是他们所指的。连续尝试下面的代码导致我收到以下错误:"输入缓冲区包含不受支持的图像格式。"我的问题可能是什么,如果您不确定,请您推荐一个不同的npm软件包以及更清晰的文档?
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 :(得分:2)
您需要删除“ data:image / png; base64”部分。
所以您在这里:
const uri = user.profileImg.split(';base64,').pop()
const downsizeProfileImgForTweet = (user, cb) => {
let imgBuffer = Buffer.from(uri, 'base64');
sharp(imgBuffer)
.resize(52, 52)
.toBuffer()
.then(data => {
console.log("success");
user.profileImg = data;
cb()
} )
.catch( err => console.log(`downisze issue ${err}`) );
}
不确定它是否可以与“ .toBuffer()方法一起使用,尽管它对我来说是这样(写文件):
sharp(imgBuffer)
.resize(1920, null)
.toFile(`${config.images_path}/${picture.filename}`)
.then(data => {
console.log('normal: ', data)
})
.catch(err => console.log(`downisze issue ${err}`))
不久前我在为此苦苦挣扎……
答案 1 :(得分:0)
尝试一下?
const buf = new Buffer(img.replace(/ ^ data:image / \ w +; base64,/,“”),'base64')