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

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 килобайт это еще не много, если взять обои то бывает часто и больше.

Может кто сталкивался - как эту проблему обойти... ?
 

SiMM

Новичок
При чём тут объём файла на диске? Размер требуемой оперативной памяти под размещение одного изображения примерно равен 3*ширину*высоту картинки.
 

kvf77

Red Devil
попробуй натравить на изображения imagemagic из командной строки
 

Vivaldy

Новичок
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 я в курсе но он есть не на всех хостингах потому хотелось бы его не использовать, так как я не уверен что тогда приложение везде сможет работать...
 

kvf77

Red Devil
Vivaldy

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

-~{}~ 12.09.05 14:35:

Vivaldy

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

Vivaldy

Новичок
я ориентируюсь на заказчика, на моем рут - и поставить я могу все.. а доступ к его хостингу я еще не получил...

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

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

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

-~{}~ 12.09.05 14:40:

про размер я изначально сказал - чтоб показать что картинки с которыми оперирую - относительно не большие.. а про то что JPG разворачивается и занимает кучу памяти я знаю..
 

SiMM

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

Vivaldy

Новичок
да - сорри поленился подсчитать вылитает именно при картинках в 1600 х 1280... спасибо,

Но может подскажите как памяти временно расширить .. на выполнение именно этого скрипта.. чтоб проходили такие размеры... они же уже не редкость... выходит то надо добавить всего 3-4 метра
 

SiMM

Новичок
> как памяти временно расширить .. на выполнение именно этого скрипта..
[m]ini.core#ini.memory-limit[/m]
 

Фанат

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

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

svdesign

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