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]   

> Без описания
dzheka3d
Отправлено: 03 Августа, 2011 - 20:02:03
Post Id



Гость


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


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




Привет всем! У меня такой вот вопрос. Каким образом можно обрезать картинку одинаково с каждой стороны?
Я попробовал сделать вот так но не получается:

PHP:
скопировать код в буфер обмена
  1.  
  2. $org_size = getimagesize($fn);
  3. $point_dst_w = ($org_size[0] - $resivl)/2; $point_dst_h = 0;
  4. imagecopyresampled($dst, $src, 0, 0, $point_dst_w, $point_dst_h, $resivl, $resivl2, $resivl, $resivl2);
  5.  


$resivl Ширина картинки которую мы должны получить
Забавно, что если вместо этого: $org_size[0] - $resivl написать например "ширина картинки минус высота" то все получается, но это не логично же....

(Отредактировано автором: 03 Августа, 2011 - 20:05:07)

 
 Top
Arni
Отправлено: 03 Августа, 2011 - 20:47:32
Post Id



Гость


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


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




PHP:
скопировать код в буфер обмена
  1. /////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // Изменение размера изображения
  3. /***********************************************************************************
  4. Функция img_resize(): генерация thumbnails
  5. Параметры:
  6.   $src             - имя исходного файла
  7.   $dest            - имя генерируемого файла
  8.   $width, $height  - ширина и высота генерируемого изображения, в пикселях
  9. Необязательные параметры:
  10.   $rgb             - цвет фона, по умолчанию - белый
  11.   $quality         - качество генерируемого JPEG, по умолчанию - максимальное (100)
  12. ***********************************************************************************/
  13. function img_resize($src, $dest, $width, $height, $quality=100)
  14. {
  15.   if(!file_exists($src)) return 1; // исходный файля не найден
  16.   $size=getimagesize($src);
  17.   if($size===false) return 2; // не удалось получить параметры файла
  18.  
  19.   // Определяем исходный формат по MIME-информации и выбираем соответствующую imagecreatefrom-функцию.
  20.   $format=strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  21.   $icfunc="imagecreatefrom".$format;
  22.   if(!function_exists($icfunc)) return 3; // не существует подходящей функции преобразования
  23.  
  24.   // Определяем необходимость преобразования размера так чтоб вписывалась наименьшая сторона
  25.   if( $width<$size[0] || $height<$size[1] )
  26.     $ratio = max($width/$size[0],$height/$size[1]);
  27.   else
  28.     $ratio=1;
  29.  
  30.   if($width/$size[0] > $height/$size[1]) { // срезать верх и низ
  31.     $dx = 0 ;
  32.     $dy = floor((($size[1] - $height) * $ratio) / 2) ; // отступ сверху
  33.   }
  34.   else { // срезать справа и слева
  35.     $dx = floor((($size[0] - $width) * $ratio) / 2) ; // отступ слева
  36.     $dy = 0 ;
  37.   }
  38.   // скока пикселов считывать с источника
  39.   $wsrc = floor($width/$ratio) ;  // по ширине
  40.   $hsrc = floor($height/$ratio) ; // по высоте
  41.  
  42.   $isrc=$icfunc($src);
  43.   $idest=imagecreatetruecolor($width,$height);
  44.  
  45.   imagecopyresampled($idest, $isrc, 0, 0, $dx, $dy, $width, $height, $wsrc, $hsrc);
  46.   imagejpeg($idest,$dest,$quality);
  47.   chmod($dest,0666);
  48.   imagedestroy($isrc);
  49.   imagedestroy($idest);
  50.   return 0; // успешно
  51.  
  52. }
 
 Top
dzheka3d
Отправлено: 03 Августа, 2011 - 21:31:09
Post Id



Гость


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


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




Огромное спасибо! То что нужно!!!
То что нужно, но немного не правильно работает.

если исходная картинка имеет размер к примеру 800x500
А мы хотим получить картинки 300x188

То справа получается черная полоса

решил проблему вот так:

PHP:
скопировать код в буфер обмена
  1. if ($size[0]/$size[1] != $width/$height)
  2. {
  3.   if($width/$size[0] > $height/$size[1]) { // срезать верх и низ
  4.     $dx = 0 ;
  5.     $dy = floor((($size[1] - $height) * $ratio) / 2) ; // отступ сверху
  6.   }
  7.   else { // срезать справа и слева
  8.     $dx = floor((($size[0] - $width) * $ratio) / 2) ; // отступ слева
  9.     $dy = 0 ;
  10.   }
  11. }

(Отредактировано автором: 03 Августа, 2011 - 21:37:16)

 
 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