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

  • Автор темы Автор темы Anton63
  • Дата начала Дата начала

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


Подскажите в чём проблема...
 
попробуй посмотреть, что у тебя лежит в переменной $im
 
Anton63, ну и?
у тебя если расширение не jpg/gif/png (по крайней мере если регулярки не отрабатывают), то $im вообще не присваивается
 
тогда надо выяснить, почему в им пустота.
кода у тебя 5 строчек. неужели так сложно в 5 строчках найти ошибку?
или ты у нас программист специализации копипаст?
 
понял, регистр в расширении...
изменил на preg_match('/[.](jpg) || (JPG)$/', $f_name)
 
Всё отлично работает... так как и нужно...
Но!
Но у меня проблема с gif анимацией... если gif сжать выше описаным методом, то это уже не анимация, а просто статичное изображение с расширением gif.
Пришла мысль проверять картинки, если картинка - гиф, то проверяем какая у неё ширина(если больше 0 и меньше или равно 90 пикселей) то просто капируем эту картинку в нужную папку. Если же ширина больше 90 то выводим сообщение, что этот файл загружать нельзя.
Но помоему это очень каряво и не красиво... полюбому должен быть способ получше.
Подскажите, пожалуйста, кто сталкивался с этим, как мне дополнить этот скрипт...
 
Anton63, php-реализация библиотеки GD не поддерживает анимацию.
 
Сверху