[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сжатие изображения
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$im0,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$im0,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


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



Спустя 28 минут, 46 секунд (24.08.2009 - 17:33) glock18 написал(а):
gd2 поключил?

Спустя 3 минуты, 18 секунд (24.08.2009 - 17:37) Anton63 написал(а):
Цитата (glock18 @ 24.08.2009 - 14:33)
gd2 поключил?

не, не в этом беда была...
нашол ошибку...
регистр в расширении был не продуман...
заменил на preg_match('/[.](jpg) || (JPG)$/', $f_name)

Спустя 30 минут, 47 секунд (24.08.2009 - 18:07) glock18 написал(а):
Цитата
заменил на preg_match('/[.](jpg) || (JPG)$/', $f_name)


ничего такой велосипед smile.gif попробуй вот этот что ли:
PHP
preg_match('/\\.jpg$/i'$f_name)


Спустя 28 минут, 3 секунды (24.08.2009 - 18:35) Anton63 написал(а):
сделал так:
PHP
preg_match('/[.](jpg)$/i'$f_name)


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

Спустя 2 часа, 32 минуты, 13 секунд (24.08.2009 - 21:08) Nikitian написал(а):
Копать надо в сторону imagick - там есть возможность работать с пакетными графическими форматами типа gif покадрово. Gd в некоторых версиях вообще не умеет работать с gif из-за лицензионных разногласий.

Спустя 14 минут, 32 секунды (24.08.2009 - 21:22) Anton63 написал(а):
понял, значит буду делать "очень каряво и не красиво".
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.