Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Скрипт изменения размеров изображения в папке
Форумы портала PHP.SU » » Графика в PHP » Скрипт изменения размеров изображения в папке

Страниц (1): [1]
 

1. VIpys - 20 Ноября, 2013 - 06:39:54 - перейти к сообщению
Функция изменения размера изображения в папке, на локальном сервере работает,
на хосте пишет Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 17088 bytes). Как понимаю, нехватает ОП, однако могу расширить её до 64м, ошибка таже, только доступный объем больше... В чем может быть проблема?

CODE (htmlphp):
скопировать код в буфер обмена
  1. #//$path  = 'img/';
  2. #//$width='50';
  3. #//$height='50';
  4. #//$copy='img/thumbs/';
  5.  
  6. function rez($path,$copy,$width,$height)
  7. {
  8.      
  9.  
  10.  
  11.  
  12. $quality = 100;
  13. $color = 0xFFFFFF;
  14.  
  15. $files = glob("$path*.jpg");
  16. //array_push($files,glob("$path*.JPG"));
  17.     for($i = 0, $length = count($files); $i < $length; $i++)
  18.    {
  19.  
  20. //echo "$files[$i] ----- $i <br>";
  21.       // Исключаем из списка директории:
  22.       if( is_dir($path.$files[$i])  )
  23.       {
  24.         unset($files[$i]);
  25.       };
  26. };
  27. //die($files[0]);
  28.  
  29. for($i=0,$L=count($files);$i<$L;$i++)
  30. {
  31. #ini_set("memory_limit", "64M");
  32. $src='./'.$files[$i];
  33. $exp=strripos($files[$i], "/" )+1;
  34. $files[$i] = substr($files[$i],$exp);
  35. $out=$copy.$files[$i];
  36. //die ($out);
  37.  
  38.  
  39.  
  40.  
  41.    // Если файл не существует
  42.    if (!file_exists($src)) {
  43.        return false;  echo "нет такого файла";
  44.    }
  45.  
  46.    // Получаем массив с информацией о размере и формате картинки (mime)
  47.    $size = getimagesize($src);
  48.  
  49.    // Исходя из формата (mime) картинки, узнаем с каким форматом имеем дело
  50.    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
  51.    //и какую функцию использовать для ее создания
  52.    $picfunc = 'imagecreatefrom'.$format;
  53.  
  54.    // Вычилсить горизонтальное соотношение
  55.    $gor = $width  / $size[0];
  56.    // Вертикальное соотношение
  57.    $ver = $height / $size[1];  
  58.  
  59.    // Если не задана высота, вычислить изходя из ширины, пропорционально
  60.    if ($height == 0) {
  61.        $ver = $gor;
  62.        $height  = $ver * $size[1];
  63.    }
  64.         // Так же если не задана ширина
  65.         elseif ($width == 0) {
  66.        $gor = $ver;
  67.        $width   = $gor * $size[0];
  68.    }
  69.  
  70.    // Формируем размер изображения
  71.    $ratio   = min($gor, $ver);
  72.    // Нужно ли пропорциональное преобразование
  73.    if ($gor == $ratio)
  74.        $use_gor = true;
  75.    else
  76.        $use_gor = false;
  77.  
  78.    $new_width   = $use_gor  ? $width  : floor($size[0] * $ratio);
  79.    $new_height  = !$use_gor ? $height : floor($size[1] * $ratio);
  80.    $new_left    = $use_gor  ? 0 : floor(($width - $new_width)   / 2);
  81.    $new_top     = !$use_gor ? 0 : floor(($height - $new_height) / 2);
  82.  
  83.    $picsrc  = $picfunc($src);
  84.    // Создание изображения в памяти
  85.    $picout = imagecreatetruecolor($width, $height);
  86.  
  87.    // Заполнение цветом
  88.    imagefill($picout, 0, 0, $color);
  89.    // Нанесение старого на новое
  90.    imagecopyresampled($picout, $picsrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
  91.  
  92.    // Создание файла изображения
  93.    imagejpeg($picout, $out, $quality);
  94.  
  95.    // Очистка памяти
  96.    imagedestroy($picsrc);
  97.    imagedestroy($picout);
  98.  
  99.    //return true;
  100.  
  101. };
  102. };
  103.  
2. 3d_killer - 20 Ноября, 2013 - 07:05:16 - перейти к сообщению
в начале скрипта
PHP:
скопировать код в буфер обмена
  1.  
  2. ini_set("memory_limit", "256M"); //Выставляем ограничение памяти на работу скрипта
  3.  

сталкивался сам
3. VIpys - 20 Ноября, 2013 - 07:59:37 - перейти к сообщению
максимально хостинг позволяет

ini_set("memory_limit", "64M");

знаю что нужно менять..хост

а оптимизировать не возможно?

Либо есть скрипт как нить по другому реализующий данную операцию?
4. Мелкий - 20 Ноября, 2013 - 08:49:48 - перейти к сообщению
GD любит память. И чем больше изображение - тем больше ему надо памяти.
Попробуйте http://php.net/manual/en/book.imagick.php Он мощнее и демократичнее к ресурсам.

 

Powered by ExBB FM 1.0 RC1