|
|
|
| А, как можно определить размер памяти занимаемой какой либо функцией при ее выполнении?
Хостер ограничивает размер выделеной памяти 16мб, и мне не хватает, вот хочу понять сколько жрет функция и как бы уменьшить размер сжираемой памяти.
Вот сама функция, может подскажите как размер используемой памяти уменьшить и как определить сколько вообще функция памяти жрет?
function resizeimg($filename,$Dir_gallery, $name,$w, $h)
{
// получим размеры исходного изображения
$size_img = getimagesize($filename);
// получим коэффициент сжатия исходного изображения
$src_ratio=$size_img[0]/$size_img[1];
if ($w == "")
{
$w = $src_ratio*$h;
$w = intval($w);
}
if ($h == "")
{
$h = $w/$src_ratio;
$h = intval($h);
}
// создадим пустое изображение по заданным размерам
$dest_img = imagecreatetruecolor($w, $h);
// зальём его белым цветом
imagefill($dest_img, 0, 0, 0xFFFFFF);
// определим коэффициент сжатия изображения, которое будем генерить
$ratio = $w/$h;
// здесь вычисляем размеры, чтобы при масштабировании сохранились
// 1. Пропорции исходного изображения
// 2. Исходное изображение полностью помещалось на маленькой копии
// (не обрезалось)
if ($src_ratio>$ratio)
{
$old_h=$size_img[1];
$size_img[1]=floor($size_img[0]/$ratio);
$old_h=floor($old_h*$h/$size_img[1]);
}
else
{
$old_w=$size_img[0];
$size_img[0]=floor($size_img[1]*$ratio);
$old_w=floor($old_w*$w/$size_img[0]);
}
// исходя из того какой тип имеет изображение
// выбираем функцию создания
switch ($size_img['mime'])
{
// если тип файла JPEG
case 'image/jpeg':
// создаем jpeg из файла
$src_img = imagecreatefromjpeg($filename);
$ext="jpg";
break;
// если тип файла GIF
case 'image/gif':
// создаем gif из файла
$src_img = imagecreatefromgif($filename);
$ext="gif";
break;
}
// масштабируем изображение функцией imagecopyresampled()
// $dest_img - уменьшенная копия
// $src_img - исходной изображение
// $w - ширина уменьшенной копии
// $h - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $size_img[1] - высота исходного изображения
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
// в зависимости от типа файла выбирвем функцию сохранения в файл
switch ($size_img['mime'])
{
case 'image/jpeg':
// сохраняем в файл small.jpg
imagejpeg($dest_img, "$Dir_gallery/$name.$ext");
break;
case 'image/gif':
// сохраняем в файл small.gif
imagegif($dest_img, "$Dir_gallery/$name.$ext");
break;
}
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
} | |
|
|
|
|
|
|
|
для: trix
(28.02.2008 в 17:25)
| | Возможно вас заинтересует функция memory_get_usage(). | |
|
|
|
|
|
|
|
для: cheops
(28.02.2008 в 17:43)
| | Спасибо полезная функция.
Оказывается немеряно забирает памяти функция:
imagecreatefromjpeg();
Не подскажите может есть аналог, с меньшим потреблением? Или можно что-то придумать чтобы она так память не забирала! | |
|
|
|
|
|
|
|
для: trix
(28.02.2008 в 18:28)
| | Неправильно используете! И не забывайте чистить память после ее использования! | |
|
|
|
|
|
|
|
для: mihdan
(28.02.2008 в 18:45)
| | :) Так а, как правильно ? | |
|
|
|
|
|
|
|
для: trix
(28.02.2008 в 18:47)
| | Ну, кушает, наверно, столько, сколько весит файл ;)
PS как правильно - не знаю)). Может быть и я неправильно использовал :rolleyes: | |
|
|
|
|
|
|
|
для: kasmanaft
(29.02.2008 в 06:44)
| | Угу, только не сколько весит, а в зависимости от разрешения файла. Если больше 1000 то около 5мб берет, а на картинку 2500х3500 судя по всему все 16мб сжирает и скрипт не выполняется :( | |
|
|
|