От узла.js к нарушению команды imagemagick - PullRequest
4 голосов
/ 12 августа 2011

Я вызываю скрипт imagemagick через node.js, и команда не работает, но я не могу понять, почему.

Упрощенный пример того, что я пытаюсь сделать:

var spawn = require('child_process').spawn,
    ls    = spawn('convert', ['-size', '168x45', 'xc:transparent', '-draw', '"image over 0,0 0,0 \'/path/to/img1.png\'"', '/path/to/out.png']);

ls.stderr.on('data', function (data) {
    console.log('stderr: ' + data);
});

Если я выполню эту точную команду (изменились только пути, поскольку они абсолютные), я получу на stderr:

"convert: non-conforming drawing primitive definition `image over 0,0 0,0 '/path/to/img1.png'' @ error/draw.c/DrawImage/3145."

Что, по мнению некоторых форумов, обычно означает, что IM не может открыть изображение из-за неверного пути и т. Д. Теперь странно то, что если я изменю convert на echo и добавлю convert Я получаю следующую команду:

convert -size 168x45 xc:transparent -draw "image over 0,0 0,0 '/path/to/img1.png'" /path/to/out.png

, который отлично работает при запуске напрямую из bash.

Есть идеи?

больше информации:

  • Я только что попробовал это из каталога изображения, и удалил путь (так что это image over ... img1.png), и я получаю ту же ошибку.
  • работает pwd так же дает мне соответствующий каталог

Ответы [ 4 ]

2 голосов
/ 12 августа 2011

Нашел ответ: http://shchekoldin.com/2009/10/13/imagemagick-convert-problem/

До сих пор не знаю, что происходит, но создаю сценарий оболочки просто:

eval 'convert '$@

и запуск в качестве команды (вместо convert) решает проблему. WTF ???

1 голос
/ 12 августа 2011

Из того, что вы говорите, вы владеете хостингом ... так что более вероятно, что у apache нет прав доступа /usr/sbin/convert.

У меня была эта проблема, и я решил ее, связав convert с /usr/local/bin как:

ln /usr/sbin/convert /usr/local/bin

Я изменил путь в моих скриптах, и все работало нормально. Если это не работает и apache по-прежнему не имеет доступа к каталогу /usr/local/bin, создайте там папку apache и предоставьте полный доступ к apache в этой папке и свяжите convert эту папку.

1 голос
/ 12 августа 2011

Работает ли node.js под тем же пользователем?Может случиться так, что у вашего пользователя есть права доступа к файлу, а у пользователя, выполняющего node.js, нет.

0 голосов
/ 08 декабря 2011

Я считаю (без тестирования), что проблема заключается в двойных кавычках в аргументе

'"image over 0,0 0,0 \'/path/to/img1.png\'"'

То, к чему вы стремитесь, это отправить всю строку как один аргумент вместо четырех отдельных слов. Тем не менее, вы уже делаете это, имея один элемент в списке аргументов командной строки. Дополнительные двойные кавычки фактически будут интерпретироваться как часть аргумента. Итак, измените аргумент на

'image over 0,0 0,0 \'/path/to/img1.png\''

и вам не нужна дополнительная команда eval.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...