Категории
Как вырезать середину изображения заданной ширины и высоты на 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 только зарегистрированные пользователи могут комментировать и оставлять рецензии. Авторизованный пользователь так же может ставить отметки книгам, фильмам и другим постам. Вести учет прочитанных книг и просмотренных фильмов. Добавлять посты в избранное и иметь к ним быстрый доступ.