【发布时间】:2023-04-03 02:15:01
【问题描述】:
我也曾在 lovell/sharp issues board 上提出过这个问题,但我希望有人可以就此提供任何建议。
我有一个由 SQS 触发并引用源图像的 lambda。然后我以某种方式获取该图像并尝试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 或使用某种请求库来获取图像,我得到了相同的结果。
如果我控制台记录sourceImageBuffer,我会正确得到<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 根白发并阅读了 google 可能提供给我的所有 bug 票...我没有想法了。
我应该尝试使用流而不是缓冲区吗?还是我在 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"
【问题讨论】: