у меня есть веб-хостинг, который дает максимальный memory_limit 80M (т.е. ini_set("memory_limit","80M");). Я использую загрузку фотографий, которая использует функцию imagecreatefromjpeg(); Когда я загружаю большие изображения, выдается ошибка «Фатальная ошибка: допустимый размер памяти 83886080 байт исчерпан». Какой максимальный размер (в байтах) изображения я могу ограничить для пользователей? или memory_limit зависит от какого-то другого фактора?
memory_limit=80M. каков максимальный размер изображения для imagecreateformjpeg()?
Ответы (2)
Размер памяти 8388608
составляет 8 мегабайт, а не 80. Вы можете проверить, можете ли вы еще где-то увеличить значение.
Помимо этого, общее правило обработки изображений заключается в том, что это займет не менее
image width x image height x 3
байт памяти для загрузки или создания образа. (Один байт для красного, один байт для зеленого, один байт для синего, возможно, еще один для альфа-прозрачности)
Согласно этому правилу, для изображения размером 640 x 480 пикселей потребуется не менее 9,2 мегабайта пространства, не считая накладных расходов и пространства, занимаемого самим сценарием.
Невозможно определить ограничение на размер файла JPG в байтах, поскольку JPG — это сжатый формат с переменной степенью сжатия. Вам нужно будет выбрать разрешение изображения и установить для него ограничение.
Если у вас не так много доступной памяти, вы можете захотеть изучить более эффективные методы выполнения того, что вы хотите, например. тайлинг (обработка одной части изображения за раз) или, если ваш провайдер позволяет это, с помощью внешнего инструмента, такого как ImageMagick (который также потребляет память, но выходит за пределы памяти PHP-скрипта).
Вероятно, ваш скрипт использует больше памяти, чем само изображение. Пытаюсь отладить потребление памяти.
Один быстрый и грязный способ — использовать memory_get_usage и memory_get_usage memory_get_peak_usage в определенных местах вашего кода и особенно в пользовательском error_handler и shutdown_function. Это может дать вам знать, какие именно операции вызывают исчерпание памяти.
createfromjpeg()
? Для этого может быть эффективное решение для памяти. - person MvanGeest   schedule 01.08.2010