Господа, в общем, перспектива изучения FileAPI меня несколько расстроила и я решил таки попробовать Imagic. И вот что получилось.
Вот функция переписанная под Imagic (удален код к работе с графикой не относящийся):
Код:
function GenThumb($srs_file) {
$new_h = 100;
echo memory_get_usage() . "\n";
$src_img = new Imagick($srs_file);
if (!$src_img){
ShowError($_TPL, $MSG['ERROR_IMG_PROCESS_READ']. $file_name. '<BR>');
return '';
}
$w = $src_img->getImageWidth();
$h = $src_img->getImageHeight();
echo memory_get_usage() . "\n";
$new_w = floor($new_h / $h * $w);
$src_img->resizeImage ($new_w, $new_h, imagick::FILTER_LANCZOS, 1);
echo memory_get_usage() . "\n";
$src_img->sharpenImage(IMAGE_SHARPEN_RADIUS, IMAGE_SHARPEN_RADIUS / 2);
echo memory_get_usage() . "\n";
$src_img->setCompression(95);
$src_img->writeImage($res_file);
echo memory_get_usage() . "\n";
$src_img->destroy();
echo memory_get_usage() . "\n";
}
А вот результаты использования памяти на сервере (файл на 18 Мп вес 7 метров в жпеге):
1292248
1292520
1292520
1292520
1292520
1293200
Что наталкивает на мысль, что работа с графикой в Imagic исполняется не в внутри PHP, а где-то снаружи.
Т.о. использование Imagic позволяет ЗНАЧИТЕЛЬНО сэкономить на памяти, используемой скриптом при работе с графикой.
В общем, FileAPI имеет тот замечательный плюс, что не надо таскать на сервер все 7 мегабайт, а можно затащить туда уже готовое изображение. Покоцанное и обрезанное. Хотя, как мне видится, путь навешивания серверного функционала на клиентскую сторону довольно спорен.