从S3获取PNG字符串后使用Jimp处理报错的问题
问题
从S3获取了一段PNG格式的字符串,格式示例如下:
�PNG\r\n' + '\x1A\n' + '\x00\x00\x00\rIHDR\x00\x00\x02\x00\x00\x00\x02\x00\b\x02\x00\x00\x00...
尝试使用Jimp处理该图片,代码如下:
const buffer = Buffer.from(imageString); const jimpImage = await Jimp.read(buffer.toString());
运行时出现报错:
The argument 'path' must be a string or Uint8Array without null bytes. Received '�PNG\r\n'...
需要解决该报错,实现图片的正常处理。
解决方案
- 错误原因:将Buffer转为字符串再传给Jimp会破坏PNG的二进制数据。PNG包含null字节和不可打印字符,转字符串时这些关键数据会丢失或损坏,导致Jimp无法识别。
- 修正代码:直接将Buffer传入
Jimp.read(),无需转成字符串:
const buffer = Buffer.from(imageString); const jimpImage = await Jimp.read(buffer);
- 特殊情况补充:如果从S3获取的原始字符串是Base64编码格式,需要先指定编码解码后再传入:
// 当imageString为Base64编码时 const buffer = Buffer.from(imageString, 'base64'); const jimpImage = await Jimp.read(buffer);
内容的提问来源于stack exchange,提问作者Shakil
相关产品推荐
相关产品推荐

