Январь 31, 2006
Сложное масштабирование изображений в PHP (Часть 4)
Немного поясню конструкцию: round((max($w_src, $h_src) – min($w_src, $h_src)) / 2).d
Это выражение вычисляет координату x или y верхнего левого угла квадратного блока (без разницы для горизонтальной или вертикальной картинки). Это видно на рисунках.
Обычно в горизонтальных картинках (лица, пейзажи, объекты) наиболее информативна центральная часть, а в вертикальных (чаще всего это стоящие люди) - наиболее важна верхняя часть. Чтобы изменить вырезаемый фрагмент вертикальной картинке, строку:
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 - большой каталог онлайн радио