gm
包以及AWS Lambda上可用的默认ImageMagick安装。但某些图像的调整大小功能会出现故障。我创建了一个Amazon Linux AMI(ami-hvm-2016.03.3.x86_64-gp2)的EC2实例,并安装了从
yum
获取的(旧版)ImageMagick 6.x版本。当我在EC2实例上使用该安装运行脚本时,它会再现Lambda上运行代码时看到的故障,确认是这个IM版本导致了失败。如果我使用
sudo yum install GraphicsMagick
安装GraphicsMagick,则可以使我的脚本执行调整大小操作而不会出错。但我不确定如何将其与serverless一起捆绑。如果我使用
sudo yum --installroot=/var/task install GraphicsMagick
命令将GraphicsMagick安装到与脚本相同的文件夹中,并使用以下require语句运行脚本:
const gm = require('gm').subClass({ imageMagick: false, appPath: './usr/bin/' });
则在EC2实例上运行脚本时,调整大小操作可以正常工作。但是在使用serverless部署并在Lambda中运行脚本时,可执行文件似乎已损坏。 gm
调用gm(buffer).size(/*...*/)
时会出现以下错误:
could not get the image size: ERR:
{"code":"EPIPE","errno":"EPIPE","syscall":"write"}
如何构建可以部署到serverless的ImageMagick或GraphicsMagick版本?
tar
、gzip
和make
。另一个替代scp
的选项是在主机上运行docker cp [container id]:/root/graphicsmagick.tgz ./
。 - Tuure