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 :: Версия для печати :: Изменение размеров изображения gif (анимированного)
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Изменение размеров изображения gif (анимированного)

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

1. Konsul - 09 Июня, 2009 - 06:12:28 - перейти к сообщению
Здравствуйте!

Проблема такая - необходимо изменять размеры загружаемых изображений. Особых проблем нет, использую следующую функцию:

CODE (text):
скопировать код в буфер обмена
  1. function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $proportion=false, $quality=100) {
  2.     if(!file_exists($src)) return false;
  3.     $size = getimagesize($src);
  4.     if($size === false) return false;  
  5.     if($proportion === true) {
  6.         $h0 = $height;
  7.         $height = ($width/$size[0])*$size[1];
  8.         if($height > $h0) { $height = $h0; $width = ($height/$size[1])*$size[0]; }}
  9.         if(!$zoom){
  10.                 if($width > $size[0]) $width = $size[0];
  11.             if($height > $size[1]) $height = $size[1];
  12.         }
  13.     $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
  14.     $icfunc = 'imagecreatefrom'.$format;
  15.     if(!function_exists($icfunc)) return false;
  16.     $x_ratio = $width/$size[0];
  17.     $y_ratio = $height/$size[1];
  18.     $ratio = min($x_ratio, $y_ratio);
  19.     $use_x_ratio = ($x_ratio == $ratio);
  20.     if($use_x_ratio) { $new_width = $width; $new_left = 0; }
  21.     else { $new_width = floor($size[0] * $ratio); $new_left = floor(($width - $new_width) / 2); }
  22.     if(!$use_x_ratio) { $new_height = $height; $new_top = 0; }
  23.     else { $new_height = floor($size[1] * $ratio); $new_top = floor(($height - $new_height) / 2); }
  24.     $isrc = $icfunc($src);
  25.     $idest = imagecreatetruecolor($width, $height);
  26.     if(is_array($dest)) {
  27.         $nd = explode('.', $src);
  28.         $ndc = count($nd);
  29.         $nd[$ndc - 2] .= $dest[0]; $dest = implode('.', $nd); }
  30.     imagefill($idest, 0, 0, $rgb);
  31.     imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
  32.     imagejpeg($idest, $dest, $quality);
  33.     imagedestroy($isrc);
  34.     imagedestroy($idest);
  35.     return $dest;
  36. }


Всё хорошо, но один изъян: после обработки этой функцией анимированные gif'ы перестают быть анимированными, т.е. представляют собой обычное изображение. Какой функцией воспользоваться или как усовершенствовать эту, чтобы анимация не пропадала после обработки?

Заранее спасибо!

 

Powered by ExBB FM 1.0 RC1