Должен ли я использовать расширение PHP для ImageMagick или просто использовать функцию PHP Exec () для запуска команд терминала? - PullRequest
3 голосов
/ 25 ноября 2011

Мне нужно выполнить следующие манипуляции с изображениями для изображений, загруженных пользователями на моем сайте:

  1. Изменить размер изображения (если оно больше определенного размера)
  2. Преобразовать все форматы изображения вjpg's
  3. Добавление водяного знака внизу всех изображений

Нужно ли использовать расширения MagickWand или iMagick или мне просто не нужно запускать команды терминала внутри exec PHP?функция?

Есть ли причина, по которой расширения PHP предпочтительнее?Что было бы быстрее и лучше для производительности (на этом сайте может быть много пользователей, и в любой момент времени будет выполняться обработка изображений)?

Ответы [ 3 ]

9 голосов
/ 25 ноября 2011

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

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

6 голосов
/ 21 декабря 2011

Я бы хотел противопоставить ответу drew010.В своем ответе он заявляет:

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

Для обработки изображений это действительно так.Ну, я точно знаю, что вызов двоичных файлов ImageMagick с использованием PHP-функции exec() (или аналогичных функций) несет в себе дополнительные издержки выше, чем при использовании встроенных библиотек PHP, однако я не совсем понимаю, на , сколько таких издержек .

Но есть и другая сторона медали.Если вы встраиваете код ImageMagick в PHP через расширение, то каждый запрос с использованием PHP занимает больше памяти, независимо от того, обрабатывает ли запрос изображение или нет .Если вы используете Apache mod_php, это становится еще больше проблемы, потому что теперь каждый запрос к вашему серверу имеет в памяти библиотеки ImageMagick, даже если он обслуживает файл HTML!

Так что это действительно зависит.Вы действительно хотите сохранить как можно меньше памяти в PHP.Если вы обрабатываете большое количество запросов, для которых требуется ImageMagic, и используете FastCGI или php_fpm, то вы, вероятно, увидите выгоду от использования встроенного ImageMagick.Но если вы только изредка обрабатываете запросы с использованием ImageMagick и / или с помощью mod_php Apache, тогда вы можете добиться гораздо большей производительности, вызывая ImageMagick через exec().

1 голос
/ 25 ноября 2011

Я всегда использую PHP GD http://php.net/manual/en/book.image.php

Вы можете выполнить изменение размера, преобразование в JPG и нанесение водяных знаков на ваши изображения. Я знаю, что в вашем сообщении говорилось, что вы должны использовать MagickWand или iMagick, но я просто хотел представить эту опцию на случай, если она будет работать для вас.

...