Как вырезать середину изображения заданной ширины и высоты на PHP

Задача следующая: пользователь загружает картинку любой ширины и высоты на сайт. А в шаблоне дизайна мы используем превью определенных размеров и пропорций, например 80х120. Нужно при загрузке исходного изображения создать это превью либо вырезать середину изображения по заданным пропорциям.

Если картинка шире, чем нужно, значит нужно отсечь лишние куски справа и слева. И поэтому вычисляем отступы по горизонтали.

Если картинка выше, чем нужно, значит отсекаем сверху и снизу...

Вот картинка для наглядности. серый блок там с соотношением 120px на 80px:

Как вырезать середину изображения заданной ширины и высоты на PHP

Готовый код, который нужно подточить под вашу систему:

 0 ? $srcWidth/$k - $maxWidth : 0;
  $yDiff = $srcHeight/$k - $maxHeight > 0 ? $srcHeight/$k - $maxHeight: 0;
  $dst = imagecreatetruecolor($srcWidth/$k-$xDiff, $srcHeight/$k-$yDiff);
  imagecopyresampled($dst, $src, 0, 0, $xDiff/2*$k, $yDiff/2*$k, $srcWidth/$k-$xDiff, $srcHeight/$k-$yDiff, $srcWidth-$xDiff*$k, $srcHeight-$yDiff*$k);

  header("Content-type: image/jpeg");
  imagejpeg($dst, null, 100);
?>

Если на выходе у вас получается черное изображение, значит вы создаете $src, но при выполнении imagecopyresampled() ничего в этот $src не копируете, соответственно, проблемы с исходным файлом.

Информация
Автор webmancer Нравится 0
Рейтинг 1 Не нравится 0
Голосов 1 Прочитали 1
Дата 2012-02-08 09:00:00 В избранном 0
Ваша реакция

Только авторизованные пользователи могут участвовать в рейтингах, делать заметки и добавлять в избранное.

Зарегистрироваться

Авторизоваться

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