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]   

> Описание: и ее сохранение
Stahanovec
Отправлено: 09 Декабря, 2010 - 18:07:49
Post Id


Новичок


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


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




в общем после того как пользователь в своем профиле загрузил картинку себе, на его личной странице выводится та самая картинка и справа по ней статистика. Вот мне нужно сделать так, чтобы именно в профиле выводилась уменьшенная копия картинки (а еще лучше чтобы без искажений она была уменьшена и обрезана под определенный размер, например 100х100).
пробовал разобраться с imagecopyresampled(), но что-то мучался и так и не смог разобраться, не работает ничего у меня.

прошу помочь
 
 Top
Реф
Отправлено: 09 Декабря, 2010 - 19:50:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 159
Дата рег-ции: Июль 2010  
Откуда: Реутов, Россия


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




Вот возможно подойдёт такой вариант. Функция создаёт копию $screen изобращения $img с заданными размерами $screen_width x $screen_height. У нового изображения скругляются углы (соотвественно png), если это лишнее думаю переделать сможешь.
PHP:
скопировать код в буфер обмена
  1.  
  2.         function screen($img, $screen, $screen_width, $screen_height)
  3.         {
  4.                 list($img_width, $img_height, $type) = getimagesize($img);
  5.                                
  6.                 $img1 = imagecreatetruecolor($screen_width, $screen_height);
  7.                
  8.                 switch ($type)
  9.                 {
  10.                     case 1: $typestr = 'gif' ;break;
  11.                     case 2: $typestr = 'jpeg'; break;
  12.                     case 3: $typestr = 'png'; break;
  13.                     default: return false;
  14.                 }
  15.            
  16.                 $function = "imagecreatefrom$typestr";
  17.                 $img2 = $function($img);
  18.                
  19.                 $w = ($img_width / $img_height > $screen_width / $screen_height) ? $screen_width / $screen_height * $img_height : $img_width;
  20.                 $h = ($img_width / $img_height < $screen_width / $screen_height) ? $screen_height / $screen_width * $img_width : $img_height;
  21.                
  22.                 $x = ($img_width - $w) / 2;
  23.                 $y = ($img_height - $h) / 2;
  24.                
  25.                 imagecopyresampled($img1, $img2, 0, 0, $x, $y, $screen_width, $screen_height, $w, $h);
  26.                
  27.                 imageline($img1, 0, 0, 2, 0, imagecolorallocate($img1, 255, 255, 255));
  28.                 imageline($img1, 0, 1, 1, 1, imagecolorallocate($img1, 255, 255, 255));
  29.                 imagesetpixel($img1, 0, 2, imagecolorallocate($img1, 255, 255, 255));
  30.                
  31.                 imageline($img1, $screen_width - 3, 0, $screen_width - 1, 0, imagecolorallocate($img1, 255, 255, 255));
  32.                 imageline($img1, $screen_width - 2, 1, $screen_width - 1, 1, imagecolorallocate($img1, 255, 255, 255));
  33.                 imagesetpixel($img1, $screen_width - 1, 2, imagecolorallocate($img1, 255, 255, 255));
  34.                
  35.                 imageline($img1, 0, $screen_height - 1, 2, $screen_height - 1, imagecolorallocate($img1, 255, 255, 255));
  36.                 imageline($img1, 0, $screen_height - 2, 1, $screen_height - 2, imagecolorallocate($img1, 255, 255, 255));
  37.                 imagesetpixel($img1, 0, $screen_height - 3, imagecolorallocate($img1, 255, 255, 255));
  38.  
  39.                 imageline($img1, $screen_width - 1, $screen_height - 3, $screen_width - 1, $screen_height - 1, imagecolorallocate($img1, 255, 255, 255));
  40.                 imageline($img1, $screen_width - 2, $screen_height - 2, $screen_width - 2, $screen_height - 1, imagecolorallocate($img1, 255, 255, 255));
  41.                 imagesetpixel($img1, $screen_width - 3, $screen_height - 1, imagecolorallocate($img1, 255, 255, 255));
  42.  
  43.                
  44.                 imagecolortransparent($img1, imagecolorallocate($img1, 255, 255, 255));
  45.                 imagepng($img1, $screen);
  46.                 imagedestroy($img1);
  47.                 imagedestroy($img2);
  48.                 return true;
  49.         }


Пример использования:
PHP:
скопировать код в буфер обмена
  1. if (screen('images/picture.jpg', 'images/screens/picture.png', 100, 100))
  2.     echo 'скрин успешно создан';

(Добавление)
Ну и пояснение принципа работы:
200 х 200px => 100 x 100px без искажения
400 х 200px => 100 x 100px с обрезкой на 50px сверху и 50px снизу
200 х 300px => 100 x 100px с обрезкой на 25px слева и 25px справа

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

(Отредактировано автором: 09 Декабря, 2010 - 19:56:08)



-----
Думать надо головой, а не головкой!
 
 Top
Stahanovec
Отправлено: 11 Декабря, 2010 - 17:03:46
Post Id


Новичок


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


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




спасибо, вроде разобрался
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB