Я использую пакет gm
для Node.js вместе со стандартной установкой ImageMagick, доступной на AWS Lambda.
const gm = require('gm').subClass({ imageMagick: true });
По некоторым причинам, функция изменения размера не работает для определенных изображений.
Я создал экземпляр EC2 с Amazon Linux AMI (ami-hvm-2016.03.3.x86_64-gp2).
Я установил (старую) версию 6.x ImageMagick, доступную с yum
. Когда я запускаю свой сценарий с этой установкой на экземпляре EC2, он воспроизводит ошибку, которую я вижу, когда код запускается на Lambda, подтверждая, что это что-то с этой версией IM, которая вызывает ошибку.
Если я установлю GraphicsMagick с sudo yum install GraphicsMagick
. Это позволяет моему сценарию выполнять изменения размера без ошибок.
const gm = require('gm').subClass({ imageMagick: false });
Тем не менее, я не уверен, как связать это в моем развертывании с без сервера. Если я устанавливаю GraphicsMagick в ту же папку, что и скрипт с sudo yum --installroot=/var/task install 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"}
Как я могу создать версию ImageMagick или GraphicsMagick, которая может быть развернута без сервера?