Проблема с ресайзингом изображений

  • Автор темы Автор темы Vivaldy
  • Дата начала Дата начала

Vivaldy

Новичок
Проблема с ресайзингом изображений

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

PHP:
$res = copy($userfile, $file_adr_orig); // Загружаю изображение
$new_img_smal = imagecreatetruecolor(100, 130); // Создаю заготовку
$img = imagecreatefromjpeg($file_adr_orig); // Создаю изображение из оригинального файла
$nn = ImageCopyResampled($new_img_smal, $img, 0, 0, 0, 0, 100, 130, $width_smal, $height_smal); // Преборазовываю оригинал в нужный размер ($width_small и $height_small - расчитываются отдельно)
$res = imagejpeg($new_img_smal, $file_adr_smal, 40); // записываю изображение
проблема в том что imagecreatefromjpeg() - выдает ошибку, если файл где-то больше 200 килобайт то пхп вылитает с нехваткой памяти. А ведь 200 килобайт это еще не много, если взять обои то бывает часто и больше.

Может кто сталкивался - как эту проблему обойти... ?
 
При чём тут объём файла на диске? Размер требуемой оперативной памяти под размещение одного изображения примерно равен 3*ширину*высоту картинки.
 
попробуй натравить на изображения imagemagic из командной строки
 
to SiMM: я не знаю причем тут объем файла - но даю меньше файл все прокатывает ... трасирую объем памяти занятой - перед вызовом функции занято 1,5 метра т.е. еще 6,5 свободно .. и сразу после этой команды вываливается ошибка: Fatal error: Allowed memory size of 8388608 bytes exhausted at (null):0 (tried to allocate 5120 bytes)
Хотя оригинальный файл jpg - 280 Kb

to kvf77: про imagemagic я в курсе но он есть не на всех хостингах потому хотелось бы его не использовать, так как я не уверен что тогда приложение везде сможет работать...
 
Vivaldy

поясняю тебе слова SiMM - JPEG в частности, это КОМПРЕССИРОВАННЫЙ файл, и в памяти он занимает часто нааааамного больше, чем на диске - и особой зависимости нет. Поэтому могут вылазить ошибки.

-~{}~ 12.09.05 14:35:

Vivaldy

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

Кроме того будет плохо если сейчас написать так а через месяц я этот модуль в другом проекте использую и он не заработает так как там не будет imagemagic

Может можно какой-то директивой указать чтоб именно этому скрипту выделилось к примеру единоразово 30 метров ...
так как в остальных скриптах жестко для всех (через php.ini) это делать мне кажется опасно.. так как память начнет выедатся тоннами... и сервер может начать себя плохо чувствовать.. или я не прав?

Или вызвать GD как-то иначе - чтоб он не ПХП-шную память ел???

-~{}~ 12.09.05 14:40:

про размер я изначально сказал - чтоб показать что картинки с которыми оперирую - относительно не большие.. а про то что JPG разворачивается и занимает кучу памяти я знаю..
 
> про размер я изначально сказал - чтоб показать что картинки с которыми оперирую - относительно не большие..
> а про то что JPG разворачивается и занимает кучу памяти я знаю..
Эти два предложения противоречат друг другу - если знаешь - то чему удивляешься? Кроме того - до тебя так и не дошло, что надо бежать и смотреть РАЗМЕР картинки, т.е. его ширину и высоту, а не место, которое она занимает на диске, и делать соответствующие выводы о том, сколько же ей нужно оперативы.
 
да - сорри поленился подсчитать вылитает именно при картинках в 1600 х 1280... спасибо,

Но может подскажите как памяти временно расширить .. на выполнение именно этого скрипта.. чтоб проходили такие размеры... они же уже не редкость... выходит то надо добавить всего 3-4 метра
 
> как памяти временно расширить .. на выполнение именно этого скрипта..
[m]ini.core#ini.memory-limit[/m]
 
будет плохо если сейчас написать так а через месяц я этот модуль в другом проекте использую и он не заработает так как там не будет imagemagic
может подскажите как памяти временно расширить
эти два предложения противоречат друг другу

верноятность того, что тебе будет позволено увеличить лимит памяти горапздо ниже, чем вероятность встретить имидж меджик.
в лучшем случае - просто можешь выставить технические условия к хостингу - объём памяти такйо-то.
 
Да, это хостер тебе лимит установил. Сталкивался с одним сервером где вообще сразу при вызове ImageCopyResampled скрипт просто слетал без каких либо сообщений.
А у себя на локальном я впихивал в эту функцию файлы JPG размером по метров 8 и ничо, работало, только долго :)
 
Сверху