NodeJS 仅在AWS Lambda中:ImageMagick错误:命令失败:转换:此图像格式没有解码委托

rmbxnbpk  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(112)

我有这个ImageMagick错误与我的网站试图转换的图像之一:

{ Error: Command failed: convert: no decode delegate for this image format `/tmp/925bf249f8297827f51f0370642eb560.jpg' @ error/constitute.c/ReadImage/544.
convert: no images defined `/tmp/abdf362d-f7eb-435f-bafe-5a134be0235f.png' @ error/convert.c/ConvertImageCommand/3046.
at ChildProcess.<anonymous> (/var/task/node_modules/imagemagick/imagemagick.js:88:15)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:886:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5) timedOut: false, killed: false, code: 1, signal: null }

奇怪的是,它只发生在我的AWS Lambda函数中,而不是在我的机器(Mac)上。我正在阅读有关版本控制,重新安装ImageMagick和东西,但我不能在Lambda运行时环境中这样做。有什么办法可以解决这个问题吗?

ef1yzkbh

ef1yzkbh1#

不要盲目相信文件扩展名。提供的图像不是JPEG格式。您可以将其下载到另一个系统,在那里您可以使用file或其他方式检查它。在手头的情况下,它是一个WebP图像(WebP是谷歌推出的一种新的图像格式)。
造成混淆的一个可能原因是Web服务器从文件扩展名生成MIME类型,因此WebP图像返回的MIME类型为image/jpeg,大多数软件(包括您的浏览器)通常盲目信任这一类型。

g52tjvyc

g52tjvyc2#

通过一些浪费的时间,我发现这是亚马逊默认在Lambda上的内置ImageMagick中的一个缺陷。它比较旧,没有WebP解码器。如果你使用下面的图层作为你的imagemagick的覆盖层,然后使用它而不是内置的图层,它会解决你的问题。
https://github.com/serverlesspub/imagemagick-aws-lambda-2
在我覆盖上面的图层之前,我得到了...

b"identify: no decode delegate for this image format `/tmp/downloaded_file' @ error/constitute.c/ReadImage/544.\n"

后来...

b'/tmp/downloaded_file WEBP 740x493 740x493+0+0 8-bit sRGB 377646B 0.000u 0:00.000\n'

大多数其他的答案和评论都集中在一些完全不相关的事情上,那就是图像文件格式实际上是webp,当imagemagick有内置的文件格式检测器时,它会忽略文件的扩展名,所以这个信息与ImageMagick无关。
享受其他遇到这个问题的人!!!

相关问题