Январь 31, 2006

Сложное масштабирование изображений в PHP (Часть 4)

Немного поясню конструкцию: round((max($w_src, $h_src) – min($w_src, $h_src)) / 2).d

Это выражение вычисляет координату x или y верхнего левого угла квадратного блока (без разницы для горизонтальной или вертикальной картинки). Это видно на рисунках.

Горизонтальное изображение

horizontal.jpg

horizontal_resize.jpg

Вертикальное изображение

vertical.jpg

vertical_resize.jpg

Обычно в горизонтальных картинках (лица, пейзажи, объекты) наиболее информативна центральная часть, а в вертикальных (чаще всего это стоящие люди) - наиболее важна верхняя часть. Чтобы изменить вырезаемый фрагмент вертикальной картинке, строку:

imagecopyresized($dest, $src, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

можно заменить на

imagecopyresized($dest, $src, 0, 0, 0, round((max($w_src,$h_src)-min($w_src,$h_src))/2), $w, $w, min($w_src,$h_src), min($w_src,$h_src));

Тогда в вертикальной картинке будет браться не верхняя часть, а средняя (это зависит от расположения объектов на фотографии). Точно так же можно брать нижнюю часть или правую/левую часть горизонтальной картинки – поэкспериментируйте с координатами. Особенно этот метод пригодится, если нужно создать квадратные «превьюшки» (thumbnails) в одной таблице.

В конце выводим картинку imagejpeg() и очищаем память imagedestroy().

Демонстрация масштабирования

Чтобы вам не приходилось лихорадочно менять входные переменные в процессе отладки на локальном сервере, предлагаю демо-страничку, которая загружает четыре картинки разных форматов. Тестовые исходные картинки должны храниться в текущей директории под именами image1.jpg и image2.jpg. Здесь же должен находиться файл resize.php, который на выводе выдаёт jpeg-изображение.

resize.htm

<html>
<head>
<title></title>
</head>
<body>
<h3 align="center">Демонстрационный пример масштабирования картинок</h3>
<table align="center">
<tr align="center" valign="top">
<td>90*90<br><img src="resize.php?f=image1.jpg&t=1&w=90&s=0" border=0></td>
<td>90*90<br><img src="resize.php?f=image2.jpg&type=1" border=0></td>
</tr>
<tr align="center" valign="top">
<td>218*x<br><img src="resize.php?f=image1.jpg&type=2" border=0></td>
<td>218*x<br><img src="resize.php?f=image2.jpg&type=2" border=0></td>
</tr>
</table>
</body>
</html>

продолжение следует...

Часть 3

Часть 5

Разместил:

Автор: fox++

Комментарии

1. 06.05.09 19:49 От: valentine

http://tuner.net.ru - большой каталог онлайн радио

Ваш комментарий

Обсудить на форуме?

Подумайте, прежде чем высказать своё мнение. Постарайтесь сделать свой комментарий полезным для других. Не используйте ненормативную лексику. Пользователи, пишущие "от нечего делать" бессмысленные наборы символов, будут блокироваться навсегда.