输入缓冲区包含不支持的图像格式



我也在lovel/sharp问题板上提出过这个问题,但我希望有人能就此提供任何建议。

我有一个lambda,它是由SQS通过引用源映像触发的。然后我以某种方式获取图像,并尝试sharpify:D

摘录如下:

import axios from "axios";
import sharp from "sharp";
//first get the source image
try {
const source = (
await axios({
url: rawImage.sourceUrl,
responseType: "arraybuffer"
})
).data;
sourceImageBuffer = Buffer.from(source);
console.log("sourceImageBuffer", sourceImageBuffer);
} catch (error) {
problemWithImage = "can't access source image";
console.log("getObject can't access source image", error);
}
//convert image to a sharp object
try {
if (!!sourceImageBuffer) {
imageBuffer = await sharp(sourceImageBuffer).toBuffer();
imageMetadata = await sharp(imageBuffer).metadata();
}
} catch (error) {
console.log(
"can't process source image. is it an image? error ",
error
);
problemWithImage = "can't process source image. is it an image?";
throw new Error(error);
}

每次引发以下错误时:2020-09-29T09:05:07.436Z 2d64036b-3a05-474f-a22a-93e3446204d6 INFO can't process source image. is it an image? error [Error: Input buffer contains unsupported image format]

我已经尝试过用s3.getObject或使用某种请求库来获取图像,我得到了相同的结果。如果我console.logsourceImageBuffer,我会正确地得到一个<Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 03 02 02 02 02 02 03 02 02 02 03 03 03 03 04 06 04 04 04 04 04 08 06 06 05 ... 25119 more bytes>

当我在本地运行代码时(在mac上,而不是在docker上(,它运行得很好。

5天后,500根白发,阅读了谷歌可能提供给我的所有错误通知单……我没有主意了。

我应该尝试使用流而不是缓冲区吗?或者我在lambda中缺少一个库?不知道。

示例图像:https://s3.eu-west-1.amazonaws.com/rp-p1-stage-core-images-cold-storage/724/724100/11121/1%3A1/kfmrixsc.jpeg

versions: {
cairo: '1.16.0',
exif: '0.6.22',
expat: '2.2.9',
ffi: '3.3',
fontconfig: '2.13.92',
freetype: '2.10.2',
fribidi: '1.0.10',
gdkpixbuf: '2.40.0',
gettext: '0.21',
gif: '5.1.4',
glib: '2.65.2',
gsf: '1.14.47',
harfbuzz: '2.7.1',
jpeg: '2.0.5',
lcms: '2.11',
orc: '0.4.31',
pango: '1.46.1',
pixman: '0.40.0',
png: '1.6.37',
svg: '2.49.4',
spng: '0.6.0',
tiff: '4.1.0',
vips: '8.10.0',
webp: '1.1.0',
xml: '2.9.10',
zlib: '1.2.11'
}
format: {
jpeg: {
id: 'jpeg',
input: { file: true, buffer: true, stream: true },
output: { file: true, buffer: true, stream: true }
},
png: {
id: 'png',
input: { file: true, buffer: true, stream: true },
output: { file: true, buffer: true, stream: true }
},
webp: {
id: 'webp',
input: { file: true, buffer: true, stream: true },
output: { file: true, buffer: true, stream: true }
},
tiff: {
id: 'tiff',
input: { file: true, buffer: true, stream: true },
output: { file: true, buffer: true, stream: true }
},
magick: {
id: 'magick',
input: { file: false, buffer: false, stream: false },
output: { file: false, buffer: false, stream: false }
},
openslide: {
id: 'openslide',
input: { file: false, buffer: false, stream: false },
output: { file: false, buffer: false, stream: false }
},
dz: {
id: 'dz',
input: { file: false, buffer: false, stream: false },
output: { file: true, buffer: true, stream: true }
},
ppm: {
id: 'ppm',
input: { file: false, buffer: false, stream: false },
output: { file: false, buffer: false, stream: false }
},
fits: {
id: 'fits',
input: { file: false, buffer: false, stream: false },
output: { file: false, buffer: false, stream: false }
},
gif: {
id: 'gif',
input: { file: true, buffer: true, stream: true },
output: { file: false, buffer: false, stream: false }
},
svg: {
id: 'svg',
input: { file: true, buffer: true, stream: true },
output: { file: false, buffer: false, stream: false }
},
heif: {
id: 'heif',
input: { file: false, buffer: false, stream: false },
output: { file: false, buffer: false, stream: false }
},
pdf: {
id: 'pdf',
input: { file: false, buffer: false, stream: false },
output: { file: false, buffer: false, stream: false }
},
vips: {
id: 'vips',
input: { file: true, buffer: false, stream: false },
output: { file: true, buffer: false, stream: false }
},
raw: {
id: 'raw',
input: { file: false, buffer: true, stream: true },
output: { file: false, buffer: true, stream: true }
}
}

package.json中的sharp版本";锋利的":"0.26.1〃;

hm。所以它开始了。在项目的另一部分,我使用sharp-phash为源图像生成一个唯一的哈希,这样我就可以检查是否需要调整大小,或者旧源和新源是否匹配。

我怀疑sharp-phash中的尖锐依赖性和我的项目是矛盾的,整个事情就这样爆炸了。

我一去掉这个尖锐的问题就解决了。

相关内容

最新更新