Альтернатива gd2 при сжатии изображений. Варианты?

Гриша К.

Новичок
Альтернатива gd2 при сжатии изображений. Варианты?

Здравствуйте.

Для сжатия изображений использую функции библиотеки gd2.

В одном скрипте происходит создание 4 вариантов размеров изображения (т.е. функции сжатия используются 4 раза), средний размер изображений 2МБ, в итоге скрипт выполняется долго, иногда даже больше 30 секунд.

Мне видется 3 варианта решения проблемы:
1) Увеличить время выполнения скрипта более 30 секунд в настройках php.
2) Разбить функции сжатия по одной, т.е. например при необходимости иметь маленький размер изображения, создавать его на той странице на которой оно должно отображаться (Т.е. если на странице превьюшек нет маленького изображения, создаем).
3) Использовать другие библиотеки. Мне уже писали на форуме о модуле CGI подходящим по сжатию изображений подходящим для php, но тогда я не мог им воспользоваться (был хостинг), а сейчас я не нашел это сообщение.

Посоветуйте и по возможности обоснуйте вариант решения.
 

Pigmeich

Новичок
Гриша К.
Есть классическое разбиение действий на несколько вызовов скрипта.

То есть, сохранять промежуточное положение и при других вызовах доделовать работы.
Либо разбить UI на два шага - в первом 2 изображения создаётся, во втором ещё 2, между ними страничка "щелкните для перехода".
Либо AJAX.
 

Гриша К.

Новичок
Апокалипсис, спасибо за ответ.
Нет, есть скрипт для загрузки изображения на сайте, при его загрузке также создаются его 4 копии разных размеров (маленькая, средняя, ...).

-~{}~ 27.10.07 07:01:

Pigmeich, спасибо за ответ.

сохранять промежуточное положение и при других вызовах доделовать работы
Я так понимаю это тоже самое что 2) пункт в моем первом сообщении.

На два шага - не нравится вариант.
AJAX - пока незнаю.
 

MaxiStyle

Новичок
Гриша К.
А если попробывать так:
1) Загружаемая картинка сжимается до большой
2) Большая картинка до средней
3) Средняя до маленькой
4) Маленькая до очень маленькой.

Основная идея - работать с загруженной картинкой 1 раз, а последующие с уже сжатой. У себя я делаю именно так.
К тому же я думаю gd2 довольно быстрая, главное использовать её правильно.
 

Гриша К.

Новичок
MaxiStyle, спасибо за ответ.
Попробую такой вариант (но уже не сейчас ) ). Вообще получается неплохой вариант, после первого сжатия картинка занимает в среднем 80 КБ, сней будет на много лучше работать.

А вот нашел imagick http://pecl.php.net/package/imagick, альтернативу gd2, мне пислаи, что там сохраняются заголовки exif.
Есть разница в производительсности небольшая между gd2 и imagick, то я бы выбрал imagick, но вот с установкой там мудрено мне все представляется.
 

Гриша К.

Новичок
sayber, спасибо за ответ.
Я уже нашел (и убрал свой вопрос в предыдущем сообщении).
Поищу документацию на русском.
 

kruglov

Новичок
Если из картинки 2000x2000 делается превьюшка 50x50, то необязательно ее делать тормозной imagecopyresampled. Можно сначала уменьшить до 200x200 через imagecopyresized, а потом дожать до 50x50 через imagecopyresampled. Качество пострадает весьма незначительно. А скорость вырастет в разы.
 

MaxiStyle

Новичок
kruglov
это то что я и предлагал
Гриша К.
сильно сомневаюсь что это быстрей gd...
попробуй мой вариант, он самый простой.
 

kruglov

Новичок
MaxiStyle
Ну, вы не упомянули, чем именно вы по шагам уменьшать рекомендуете. Потом, уже первое уменьшение может быть слишком "во много раз".
 

Фанат

oncle terrible
Команда форума
MaxiStyle
на чем твои сомнения основаны? На том, что gd - убогая кривая библиотечка, а im - профессиональный инструмент?

Гриша К.
для работы с imagemagick не нужны никакие модули.
это набор утилит командной строки, которые можно запускать из пхп с помощью system()
поэкспериментировав с параметрами, можно добиться приемлемого качества и скорости
 

Гриша К.

Новичок
kruglov, спасибо за ответ.

Последовательность сжатий изображений: оригинал -> 550x375 -> 330x250 -> ...
Вообще от функции imagecopyresized я отказался от плохого качества, даже если делать маленькие превьюшки получается очень плохое изображение (сейчас еще раз убелися в этом срванив 2 превьюшки сделанные разными методами).

MaxiStyle, спасибо за ответ.
Если выбирать gd2 то я воспользуюсь вашей идеей. Но пока попробую разобраться с imagick

0|0анат, спасибо за ответ.
буду разбираться с imagick.
 

kruglov

Новичок
Гриша К.
Т.е. вы пробовали через imagecopyresized уменьшать с 2000x2000 до 200x200, а потом через imagecopyresampled уменьшить до 50x50, и качество получалось очень плохое?
 

Гриша К.

Новичок
kruglov,
нет, я уменьшил imagecopyresized с оригинала и до нескольких размеров в сторону уменьшения, и тож е самое седлал magecopyresampled.
Попробую сделать именно так как вы пишите.
 

becool

Новичок
Гриша К. почему не сохранять уменьшенные картинки на диске, и в след раз просто открывать их, не тратя время на исполнения скрипта?
 

MaxiStyle

Новичок
becool
Я думаю он так и делает, вот только процес уменьшения и сохранения долго происходит.
Гриша К.
Добились прогресса?
 
Сверху