Я думаю, должно быть в состоянии определить пиковое использование памяти GD, анализируя исходный код imagecopyresampled
, но это может быть сложно, требовать расширенного профилирования, варьироваться от версии к версии и бытькак правило, ненадежный.
В зависимости от вашей ситуации на ум приходит другой подход: при изменении размера изображения вызывайте другой сценарий PHP на том же сервере, но с использованием http:
$file = urlencode("/path/to/file");
$result = file_get_contents("http://example.com/dir/canary.php?file=$file&width=1000&height=2000");
(очисткапараметр file
, очевидно)
Если этот скрипт завершится неудачно с ошибкой «недостаточно памяти», вы узнаете, что изображение слишком велико.
Если ему удастся успешно изменить размеризображение, он может вернуть путь к временному файлу, содержащему результат изменения размера.С этого момента все пойдет нормально.