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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Изменение размеров при сохранении загружаемого изображения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
maksmib
Отправлено: 17 Января, 2011 - 09:19:58
Post Id



Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Здравствуйте, господа.
Немного не могу понять логику, как поступить. Буду признателен за подсказку.
Хочу сделать так, чтобы при загрузке изображения оно бы сохранялось не более определенного размера.
Тоесть если пользователь загружает картинку 1024х768, она должна сохраниться в размере, скажем 80х80.

Загруженное изображение сохраняется вот так:

PHP:
скопировать код в буфер обмена
  1. copy($_FILES['uploadImg']['tmp_name'], 'imgs/'.$imgFile);


Плюс у меня есть файлик resize.php, составленный из этого урока: http://php.su/articles/?cat=graph&page=017

Но его я могу использовать при отображении изображения таким образом:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <img src="../scripts/resize.php?file=file.jpg" />


А могу ли я как то с его же помощью сделать так, чтобы изображение сохранялось на сервере уже с измененными размерами?
 
 Top
Uchkuma
Отправлено: 17 Января, 2011 - 09:29:01
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Конечно можете. В вашем скрипте вы можете увидеть, что картинка в браузер выводится ф-ей imagejpeg. Если вы посмотрите описание этой функции, то увидите, что вторым параметром можно указать путь бля сохранения изображения.
 
 Top
GeeMTee
Отправлено: 17 Января, 2011 - 09:39:55
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Янв. 2011  
Откуда: Беларусь, Минск


Помог: 0 раз(а)




Вот завалялась функция, которой можно обрабатывать картинку на сервере и потом сохранять в удобном виде. Но советую ее понять и, может быть, поубирать чего лишнего, сделать конкретно под себя.

PHP:
скопировать код в буфер обмена
  1. function img_resize($src, $dest, $width, $height, $rgb = 0xFFFFFF, $quality = 100, $name = '') {  
  2. if (!file_exists($src)) {  
  3.     return false;  
  4. }  
  5.  
  6. $size = getimagesize($src);  
  7.  
  8. if ($size === false) {  
  9.     return false;  
  10. }  
  11.  
  12. $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));  
  13. $icfunc = 'imagecreatefrom'.$format;  
  14.  
  15. if (!function_exists($icfunc)) {  
  16.     return false;  
  17. }  
  18.  
  19. $x_ratio = $width  / $size[0];  
  20. $y_ratio = $height / $size[1];  
  21.  
  22. if ($height == 0) {  
  23.  
  24.     $y_ratio = $x_ratio;  
  25.     $height  = $y_ratio * $size[1];  
  26.  
  27. } elseif ($width == 0) {  
  28.  
  29.     $x_ratio = $y_ratio;  
  30.     $width   = $x_ratio * $size[0];  
  31.  
  32. }  
  33.  
  34. $ratio       = min($x_ratio, $y_ratio);  
  35. $use_x_ratio = ($x_ratio == $ratio);  
  36.  
  37. $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);  
  38. $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);  
  39. $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width)   / 2);  
  40. $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);  
  41.  
  42. // если не нужно увеличивать маленькую картинку до указанного размера
  43. if ($size[0]<$new_width && $size[1]<$new_height) {
  44.     $width = $new_width = $size[0] ;
  45.     $height = $new_height = $size[1] ;
  46. }
  47.  
  48. $isrc  = $icfunc($src);  
  49. $idest = imagecreatetruecolor($width, $height);  
  50.  
  51. imagefill($idest, 0, 0, $rgb);  
  52. imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);  
  53.  
  54. $i = strrpos($name,".");
  55. if (!$i) { return ""; }
  56. $l = strlen($name) - $i;
  57. $ext = substr($name,$i+1,$l);
  58.        
  59. switch ($ext) {
  60.     case "jpeg":
  61.     case "jpg":
  62.     imagejpeg($idest,$dest,$quality);
  63.     break;
  64.     case "gif":
  65.     imagegif($idest,$dest,$quality);
  66.     break;
  67.     case "png":
  68.     imagepng($idest,$dest,$quality);
  69.     break;
  70. }
  71.  
  72. imagedestroy($isrc);  
  73. imagedestroy($idest);
  74.  
  75. return true;  
  76. }


Отредактировано модератором: Uchkuma, 17 Января, 2011 - 09:43:54
Не тем тэгом оформили.


-----
<?php echo 'Hello, World' ; ?>
 
 Top
maksmib
Отправлено: 17 Января, 2011 - 13:21:50
Post Id



Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Ухты, спасибо.
Но немного не понятно, что за последний параметр, пустой причем по умолчанию.
А главное почему именно из него выдерается расширение файла?
 
 Top
JustUserR
Отправлено: 17 Января, 2011 - 15:27:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




maksmib пишет:
Но немного не понятно, что за последний параметр, пустой причем по умолчанию
В приведенном описании целевой PHP-функции осуществляющей изменение размера изображения в соответсвии с предполагаемыми требованиями - использование последнего параметра включено исключительно для определения формата генерируемого изображения на основе классических MIME-сопоставлений расширения - однако в общем случае необходимо производить корректных анализ на основе использования технологии mime_magic в функции http://php.su/functions/?mime-content-type


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB