memory_limit=80M. каков максимальный размер изображения для imagecreateformjpeg()?

у меня есть веб-хостинг, который дает максимальный memory_limit 80M (т.е. ini_set("memory_limit","80M");). Я использую загрузку фотографий, которая использует функцию imagecreatefromjpeg(); Когда я загружаю большие изображения, выдается ошибка «Фатальная ошибка: допустимый размер памяти 83886080 байт исчерпан». Какой максимальный размер (в байтах) изображения я могу ограничить для пользователей? или memory_limit зависит от какого-то другого фактора?


person Arun David    schedule 01.08.2010    source источник
comment
Похоже, ваш хостинг ограничивает память до 8 МБ, а не до 80.   -  person Your Common Sense    schedule 01.08.2010
comment
Что вы хотите сделать с изображением, которое вы createfromjpeg()? Для этого может быть эффективное решение для памяти.   -  person MvanGeest    schedule 01.08.2010


Ответы (2)


Размер памяти 8388608 составляет 8 мегабайт, а не 80. Вы можете проверить, можете ли вы еще где-то увеличить значение.

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

image width x image height x 3 

байт памяти для загрузки или создания образа. (Один байт для красного, один байт для зеленого, один байт для синего, возможно, еще один для альфа-прозрачности)

Согласно этому правилу, для изображения размером 640 x 480 пикселей потребуется не менее 9,2 мегабайта пространства, не считая накладных расходов и пространства, занимаемого самим сценарием.

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

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

person Pekka    schedule 01.08.2010
comment
Привет, Пекка, спасибо за ответ и извините, я по ошибке написал как 8388608, на самом деле это 83886080 байт. И когда я попытался загрузить 3200X2400 с 3,5 МБ, это дает ошибку. какую максимальную ширину, высоту или размер я могу ограничить для загрузки, чтобы предотвратить ошибку? Заранее спасибо :-) - person Arun David; 03.08.2010
comment
@Арун трудно сказать! Изображение размером 3200x2400 должно умещаться в 80 МБ — возможно, сценарий написан неэффективно и сохраняет все изображение в нескольких переменных. - person Pekka; 03.08.2010

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

Один быстрый и грязный способ — использовать memory_get_usage и memory_get_usage memory_get_peak_usage в определенных местах вашего кода и особенно в пользовательском error_handler и shutdown_function. Это может дать вам знать, какие именно операции вызывают исчерпание памяти.

person Aron Cederholm    schedule 03.05.2012