Resize картинок

Beat

Новичок
Resize картинок

стоит проблема ресайза картинок на shared хостинге, и того имеем макс. 40 мб RAM, и 5% от загрузки ядра процессора, картинки макс. 1600 x 1000 px, сжимать до (800 x 600, 1027 x 768, 1280 x 800), то есть нужно много оперативной памяти.
Есть поддержка ImageMagick, ну и GD2 само собой. Вопрос в том какую из них выбрать, ибо тестов по их сравнении скорости нигде не нашел.

Как вариант, написать однопоточный демон который будет ресайзить по одной, и ставить другие в очередь, но тут тоже свои трудности возникают
 

DiMA

php.spb.ru
Команда форума
1. пойди и сравни

2. так и надо делать, но никаких демонов не нужно, просто скрипт (конвертит все что накопилось) по крону раз в 5 секунд. Никаких трудностей нет.
 

Wicked

Новичок
хинт: для imagemagick оптимально использовать ключик -scale

а какой предполагается выходной формат? и всегда ли нужно пережимать во все эти размеры сразу? или размер обычно выбирается один?
 

Beat

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

predator

web designer
im - однозначно
скрипт на крон
при отображении: если картинок с изменённым размером не появилось где надо - показать что фото вскоре появится
я бы где-то так сделал )

вообще можно и на лету генерить, но естественно с кэшированием
но делать это не через <img src="/resize.php ... а лучше до отображения в браузер.
 

Beat

Новичок
нет, выдавать скриптом статику это - зло


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

predator

web designer
ну почему-же зло? )
ресайзим только раз - потом всё хранится в кэше
можно и не в кэше а в нужном месте и в хтмл путь до файла захардкодить...

второе не понял
если ваши люди не могут подождать тогда можно и демон запустить. только в этом случае тоже возможно придётся ждать
а система гораздо усложнится

вобщем вам решать )
 

DiMA

php.spb.ru
Команда форума
да засуньте вы в ж. своего демона!

по крону ежеминутно запускается пхп-скрипт:
- имеет защиту от двойного запуска
- раз в Х (например, 1) сек пытается разгрести очередь и сконвертить
- после Х (86400) сек работы - завершается, чтобы память не утекала

скрипт можно стартовать не с крона, а прямо с пхп-скрипта на аплоде
 

Фанат

oncle terrible
Команда форума
predator
твой метод предполагает, что вместо распределенной по времени нагрузки, первые зрители новой галереи о фосьми гигах устроят дос сайту и красные крестики себе. Офигенная идея.
 

predator

web designer
фанат
было сказано
"потому что картинок будет примерно 8 Гб (оригинальных), и пользователям нужно выдавать их в различном расширении, котором они сами выберут"

я понял что предполагается >всего< картинок будет 8Гб и одновременно в любой галёре выдают ограниченное кол-во картинок, постранично т.е.

думаю 20-30 картинок размером максимум 1600 x 1000 обработать на лету один раз (при первом просмотре) проблем не составит?

конечно если тут особый случай (будут показываться разом все 8 гигов во всех вариантах) тогда конечно моё решение не сработает ) в общем нужно уточнить как будет отображаться галерея...

кстати вопрос был не в том как сделать распределённую нагрузку на шаред хостинге )) а в том какую либу использовать (gd/im) и в каком ключе.

-~{}~ 07.07.09 15:59:

Автор оригинала: DiMA
да засуньте вы в ж. своего демона!
ну почемуже так далеко? )
если ещё использовать ветвление то очень даже неплохо и быстро может получится
другое дело что в данном случае это уже мудрёжь на постном масле ; )
 

nexen

Новичок
Beat - подождите, какие демоны ? - зачем ?

1)делаем однократный ресайз всех файлов сохраняем копии
2)уменьшеные копии используем для превью
3)по клику на копию в превью выдаем в браузер основной файл c выбранной пользователем шириной, высотой

или можно сделать - маленькую, среднюю и большую копии всех файлов
p.s.
всё будет очень быстро работать, копии для превью будут весить копейки и никакого ресайза постоянно для каждого пользователя
 
Сверху