Сжатие изображения

Anton63

Новичок
Сжатие изображения

Скрипт по сжатию изображения jpg, png или gif.
Этот скрипт подгоняет аватарку пользователя под ширину 80 px, аватару загружает пользователь со своего компа.

Конфигурации:
PHP:
$f_name = $_FILES['avat']['name'];  
$path_img = 'avat/';  
$path_tmp = 'tmp/avat/';  
$final_width = 80;



сам скрипт:
PHP:
if(preg_match('/[.](jpg)$/', $f_name))//Определяем формат изображения
  $im = imagecreatefromjpeg($path_tmp . $f_name);
else 
  if (preg_match('/[.](gif)$/', $filename)) 
    $im = imagecreatefromgif($path_tmp . $f_name);
  else 
    if (preg_match('/[.](png)$/', $filename)) 
      $im = imagecreatefrompng($path_tmp . $f_name);
$ox = imagesx($im); //ширина и высота загруженого изображения
$oy = imagesy($im);    
$nx = $final_width; //ширина и высота сжатого изображения
$ny = floor($oy * ($final_width/ $ox));
$nm = imagecreatetruecolor($nx, $ny); //создание формы для сжатого изображения
imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);//вставка в форму
if(preg_match('/[.](jpg)$/', $f_name))//Вставляем отредактированое изображение, в зависимости от формата
{ 
  $im = imagecreatefromjpeg($path_tmp . $f_name);
  imagejpeg($nm, $path_img . $name);
  unlink($path_tmp . $f_name);
}
  else 
    if (preg_match('/[.](gif)$/', $f_name)) 
    {
      $im = imagecreatefromgif($path_tmp . $f_name);
      imagegif($nm, $path_img . $name);
      unlink($path_tmp . $f_name);
    }
    else 
      if (preg_match('/[.](png)$/', $f_name)) 
      {
        $im = imagecreatefrompng($path_tmp . $f_name);
        imagepng($nm, $path_img . $name);
        unlink($path_tmp . $f_name);
      }

$name генерируется рандомно... до этого скрипта.

ошибку пишет в строках
PHP:
$ox = imagesx($im);
$oy = imagesy($im);    

$ny = floor($oy * ($final_width/ $ox));
$nm = imagecreatetruecolor($nx, $ny);
imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);

вот сами ошибки:
Warning: imagesx(): supplied argument is not a valid Image resource in Z:\home\test1.ru\www\work_registr.php on line 136

Warning: imagesy(): supplied argument is not a valid Image resource in Z:\home\test1.ru\www\work_registr.php on line 137

Warning: Division by zero in Z:\home\test1.ru\www\work_registr.php on line 139

Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in Z:\home\test1.ru\www\work_registr.php on line 140

Warning: imagecopyresized(): supplied argument is not a valid Image resource in Z:\home\test1.ru\www\work_registr.php on line 141


Подскажите в чём проблема...
 

Фанат

oncle terrible
Команда форума
попробуй посмотреть, что у тебя лежит в переменной $im
 

dimagolov

Новичок
Anton63, ну и?
у тебя если расширение не jpg/gif/png (по крайней мере если регулярки не отрабатывают), то $im вообще не присваивается
 

Фанат

oncle terrible
Команда форума
тогда надо выяснить, почему в им пустота.
кода у тебя 5 строчек. неужели так сложно в 5 строчках найти ошибку?
или ты у нас программист специализации копипаст?
 

Anton63

Новичок
понял, регистр в расширении...
изменил на preg_match('/[.](jpg) || (JPG)$/', $f_name)
 

Anton63

Новичок
Всё отлично работает... так как и нужно...
Но!
Но у меня проблема с gif анимацией... если gif сжать выше описаным методом, то это уже не анимация, а просто статичное изображение с расширением gif.
Пришла мысль проверять картинки, если картинка - гиф, то проверяем какая у неё ширина(если больше 0 и меньше или равно 90 пикселей) то просто капируем эту картинку в нужную папку. Если же ширина больше 90 то выводим сообщение, что этот файл загружать нельзя.
Но помоему это очень каряво и не красиво... полюбому должен быть способ получше.
Подскажите, пожалуйста, кто сталкивался с этим, как мне дополнить этот скрипт...
 

baev

‹°°¬•
Команда форума
Anton63, php-реализация библиотеки GD не поддерживает анимацию.
 
Сверху