如何将 base64 字符串格式的图像转换为清晰图像缩小器期望的数据类型?
Posted
技术标签:
【中文标题】如何将 base64 字符串格式的图像转换为清晰图像缩小器期望的数据类型?【英文标题】:How do I convert a base64 string formatted image to the datatype sharp image downsizer expects? 【发布时间】:2017-09-21 08:59:12 【问题描述】:我正在尝试对节点中的图像进行下采样。我将该图像存储为 base64 编码字符串(即:“data:image/png;base64,iVBOR”等)。我正在使用夏普 npm 包。该文档似乎描述了 sharp 可以采用图像的文件路径或“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`) );
我浏览了整个互联网并做了一堆猜测和检查,所以请原谅我的菜鸟问题。提前感谢您提供的任何帮助!
【问题讨论】:
换句话说就是一个缓冲区 【参考方案1】:试试这个?
const buf = new Buffer(img.replace(/^data:image/\w+;base64,/, ""),'base64')
【讨论】:
从节点 6 开始,不推荐使用带有 Buffer 的构造函数【参考方案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`))
不久前我还在为此苦苦挣扎……
【讨论】:
以上是关于如何将 base64 字符串格式的图像转换为清晰图像缩小器期望的数据类型?的主要内容,如果未能解决你的问题,请参考以下文章
Python 对图像进行base64编码及解码读取为numpyopencvmatplot需要的格式
使用 AngularJs 将 base64 格式的数据转换为图像
如何将图像转换为 Base64 字符串,并转换回图像,保存到 azure blob