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
Форумы портала PHP.SU :: Версия для печати :: Вырезать часть изображения
Форумы портала PHP.SU » » Графика в PHP » Вырезать часть изображения

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

1. psevdo - 02 Апреля, 2014 - 19:13:05 - перейти к сообщению
Здравствуйте. Передо мной стоит такая задача . Есть файл с картинкой. Мне нужно вырезать из него кусок. Для этого у меня есть смещение по вертикали и горизонтали, а так же ширина и высота вырезаемой области. Этот кусок мне необходимо сохранить в png файле.

параметры функции:

    1. dir - директория хранения исходного файла
    2. img - имя исходного файла
    3. topPosition - смещение по вертикали (откуда необходимо вырезать)
    4. leftPosition - смещение по горизонтали (откуда необходимо вырезать)
    5. cropWidth - ширина вырезаемой области
    6. cropHeight - высота вырезаемой области

PHP:
скопировать код в буфер обмена
  1.  
  2. private function imageCrop($dir, $img, $prefix, $topPosition, $leftPosition, $cropWidth, $cropHeight) {
  3.  
  4.    list($width, $height, $type) = getimagesize($dir.'/'.$img);
  5.    if(!$width || !$height) return false;
  6.                
  7.    $types = array('gif', 'jpg', 'jpeg', 'png');
  8.    $ext = $types[$type];
  9.                
  10.    $baseName = pathinfo($img);
  11.    $baseName = $baseName['filename'].'.png';
  12.                
  13.    if($ext) {
  14.       switch($ext) {
  15.          case 'gif': $imgRes = imagecreatefromgif($dir.'/'.$img); break;
  16.          case 'jpg':
  17.          case 'jpeg': $imgRes = imagecreatefromjpeg($dir.'/'.$img); break;
  18.          case 'png': $imgRes = imagecreatefrompng($dir.'/'.$img); break;
  19.          default: break;
  20.       }
  21.  
  22.       $imgNew = imagecreatetruecolor($cropWidth, $cropHeight);
  23.       imagecopyresized($imgNew, $imgRes, 0, 0, $topPosition, $leftPosition, $cropWidth, $cropHeight, $width, $height);
  24.       imagepng($imgNew, $dir.$prefix.$baseName);
  25.       imagedestroy($imgNew);
  26.       imagedestroy($imgRes);
  27.       return '/'.$dir.$prefix.$baseName;
  28.    } else {
  29.       echo 'Не корректный формат файла';
  30.       return false;
  31.    }
  32. }
  33.  


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

 

Powered by ExBB FM 1.0 RC1