Нужна помощь для преобразования PSD в PNG в GraphicsMagick - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь преобразовать PSD в PNG в GraphicsMagick с помощью следующей команды:

#gm convert file.psd -flatten file.png

Все выглядит без проблем, пока веб-приложение находится на сервере-отправителе.Когда я перемещаю веб-приложение на рабочий сервер, некоторые файлы PSD получат следующее сообщение об ошибке:

In GraphicsMagick 1.3.12 : gm convert: Too much image data in file.

или это:

In GraphicsMagick 1.2.10 : gm convert: Memory allocation failed (unable to allocate cache info) [Cannot allocate memory].

Самая смешная частьон работает на промежуточном сервере, но не работает на рабочем сервере.Разрушающие серверы - это FreeBSD в VMWare, а рабочие серверы - это физические серверы.

В Интернете очень мало документации, которую я нашел.Всего несколько месяцев назад здесь: http://sourceforge.net/mailarchive/forum.php?thread_name=20110301013714.GC15521%40node99.net&forum_name=graphicsmagick-help

упоминал ту же проблему, но без ответа.

Мне интересно, могу ли я получить помощь здесь.Или, может быть, я ошибаюсь, я должен выбрать ImageMagick.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2013

Я столкнулся с этой проблемой. Похоже, это ограничение графики. Если вы используете ключ -debug all, вы увидите, что декодер для psd пытается выделить больше памяти, чем доступно для процесса.

Например, у меня был 6-мегабайтный PSD, который я хотел использовать в JPG. GM не смог этого сделать, потому что пытался раздувать все сразу, и ему потребовалось бы 64 ГБ оперативной памяти (это на моей машине для разработки, которая имеет только 8 ГБ).

Я выполнил ту же команду на imagemagick, и она не сработала (на моей машине для разработки)

0 голосов
/ 11 апреля 2013

Вероятно, рабочий сервер имеет более низкий предел памяти для каждого процесса, чем ваша промежуточная виртуальная машина.Таким образом, ограничение, вероятно, наложено программным обеспечением, а не фактическим оборудованием.

Ограничения могут быть на пользователя (или, скорее, на класс пользователя ), а такжеобщесистемный (с использованием sysctl).Попробуйте запустить

% sysctl -Aa|fgrep kern.max

и сравните выходные данные между двумя серверами (kern.maxdsiz и kern.maxssiz представляют особый интерес).Кроме того, попробуйте просто запустить лимиты как пользователь веб-сервера:

% su          # become root
% su -m www   # become www
% limits

и, опять же, сравнить вывод.

Наконец, возможно, ваш производственный сервер просто используетбольше памяти (для других целей, например, для обслуживания другого контента), тогда как промежуточная система обрабатывает только одно преобразование файла и, таким образом, не достигает предела?

...