Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Помогите доработать функцию, которая обрезает изображение

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 16 Февраль 2010 - 10:05

есть функция evokeArea($smallimage,0,0,150,150,$target_filename)
которая обрезает изображение, а как сделать, чтоб она вырезала середину изображения?

/**
/* @desc функция вырезает на картинке произвольную область
/* @param $filename путь к файлу с исходной картинкой
/* @param $x координата верхего левого угла нужной области
/* @param $y координата верхего левого угла нужной области
/* @param $w нужная ширина "обрезка"
/* @param $h нужная высота "обрезка"
/* @param $target_filename куда записывать результат. Если не указать, то перепишется исходный файл.
*/
function evokeArea($filename,$x,$y,$w,$h,$target_filename=null){
$thumb = imagecreatetruecolor($w, $h);
$bgc = imagecolorallocate($thumb, 255, 255, 255);
imagefilledrectangle($thumb, 0, 0, $w, $h, $bgc);
$source = imagecreatefromjpeg($filename);
imagecopyresampled($thumb, $source, 0, 0, $x, $y, $w, $h, $w, $h);
$target_filename = is_null($target_filename)?$filename:$target_filename;
imagejpeg($thumb,$target_filename);
imagedestroy($thumb);
imagedestroy($source);
return true;
}
?>

 

 

  • 0

#2 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 16 Февраль 2010 - 13:08

sc2r2bey,
примерно, так

/**
/* @desc функция вырезает на картинке произвольную отцентрованную область
/* @param $filename путь к файлу с исходной картинкой
/* @param $w нужная ширина "обрезка"
/* @param $h нужная высота "обрезка"
/* @param $target_filename куда записывать результат. Если не указать, то перепишется исходный файл.
*/
function evokeAlignedArea($filename,$w,$h,$target_filename=null){
$thumb = imagecreatetruecolor($w, $h);
$bgc = imagecolorallocate($thumb, 255, 255, 255);
imagefilledrectangle($thumb, 0, 0, $w, $h, $bgc);
$source = imagecreatefromjpeg($filename);
$size = GetImageSize($filename);
$x = round(($size[0]-$w)/2);
$y = round(($size[1]-$h)/2);
imagecopyresampled($thumb, $source, 0, 0, $x, $y, $w, $h, $w, $h);
$target_filename = is_null($target_filename)?$filename:$target_filename;
imagejpeg($thumb,$target_filename);
imagedestroy($thumb);
imagedestroy($source);
return true;
}
?>

(работоспособность исходной функции не проверял, только убрал из параметров функции $x,$y и добавил вычисление центральной области картинки)
опять же, желательно добавить проверки на то,
что $filename - это картинка и что делать, если это не так,
 $size = @GetImageSize($filename); if ($size) {} else {}

что $w, $h - не превышают размеров исходного изображения и что делать, если это не так


  • 0


Оформление форума – IPBSkins.ru