Это только часть проблем, связанных с использованием динамических кнопок. Например, в листинге 25.1 содержится сценарий, создающий PNG-изображение кнопки с текстовым обозначением. Кнопка имеет прямоугольную форму и рельефное изображение. Текст имеет оттеняющий эффект и отцентрирован горизонтально и вертикально. Вывод, полученный в результате работы этого сценария, показан на рис. 25.1.
Листинг 25.1. Кнопка PNG
<?php /*
** Кнопка PNG
** Создание графической кнопки на основании ** переменных форм.
*/
class Button {
private $image;
public function _construct($width, $height, $label, $font)
{
$this->image = imagecreate($width, $height); $colorBody = imagecolorallocate($this->image,
0x99, 0x99, 0x99); $colorShadow = imagecolorallocate($this->image,
0x33, 0x33, 0x33);
$colorHighlight = imagecolorallocate($this->image,
0xCC, 0xCC, 0xCC); //создать тело кнопки imagefilledrectangle($this->image,
1, 1, $width-2, $height-2,
$colorBody); // нарисовать тень imageline($this->image,
0, $height-1,
$width-1, $height-1,
$colorShadow); // нарисовать тень справа imageline($this->image,
$width-1, 1,
$width-1, $height-1,
$colorShadow); //нарисовать подсветку сверху imageline($this->image,
$width-1, 0,
$colorHighlight); // нарисовать подсветку слева imageline($this->image,
0, 0,
0, $height-2,
$colorHighlight); // определить размер текста $labelHeight = imagefontheight($font);
$labelWidth = imagefontwidth($font) * strlen($label); // задать верхний левый угол текста
$labelX = ($width - $labelWidth)/2; $labelY = ($height - $labelHeight)/2;
// оттенить текст imagestring($this->image,
$font,
$labelX+1, $labelY+1,
$label,
$colorShadow); //задать обозначение imagestring($this->image,
$font, $labelX, $labelY, $label,
$colorHighlight);
}
public function drawPNG()
{
header("Content-type: image/png"); imagepng($this->image);
}
public function drawJPEG()
{
header("Content-type: image/jpeg"); imagejpeg($this->image);
}}
//задать параметры, если они отсутствуют if(!isset($_REQUEST['width']))
$_REQUEST['width'] = 100;
if(!isset($_REQUEST['height']))
$_REQUEST['height'] = 30; if(!isset($_REQUEST['label']))
$_REQUEST['label'] = "CLICK";
if(!isset($_REQUEST['font']))
$_REQUEST['font'] = 5;
$b = new Button($_REQUEST['width'], $_REQUEST['height'], $_REQUEST['label'], $_REQUEST['font']); $b->drawPNG();
Первым действием данного сценария является попытка убедиться в том, что у него есть действительная информация для всех параметров, включая размеры кнопки и текста, привязанного к кнопке. Я выбрал использование встроенных шрифтов, которые пронумерованы от единицы до пяти. В главе 16, "Обработка изображений и графики", описывались функции, предназначенные для загрузки различных шрифтов, и я могу лишь пожелать читателю успехов в модификации этого сценария и дальнейшем использовании его.
Следующим действием является создание изображения. Для этого есть два пути. Можно создать пустое изображение определенного размера, но можно и загрузить уже существующий файл изображения. Я выбрал первый способ, так как он позволяет создавать кнопки любого размера. Более стилизованные кнопки можно создавать с помощью последнего способа. Но это совсем другая задача.
Эта кнопка будет создана в трех цветах: основном цвете, цвете подсветки и цвете тени. Для этого были выбраны три оттенка серого цвета, которые распределяются с помощью функции imagecolorallocate. С использованием основного цвета этот сценарий создает прямоугольник, который на один пиксель меньше всего изображения. Граница этого прямоугольника создается с помощью четырех линий. Снизу и справа эти линии вырисовываются в цвете тени, а слева и сверху - в цвете подсветки, что создает иллюзию трехмерного изображения.
В завершение сценарий создает текст. Сначала текст появляется немного смещенным относительно центра в цвете тени. После этого по нему выписывается точно отцентрированный текст в цвете подсветки, создавая впечатление, что он может свободно перемещаться на кнопке.
Теперь сценарий создает изображение, и ему необходимо отправить его в браузер. Очень важно, чтобы при этом был отправлен заголовок, который дает понять, что этот файл является изображением. Без этого будет получен набор загадочных символов.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Создание графических изображений. Часть Вторая.
13-06-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Создание графических изображений | PHP. Создание графических изображений. Часть Третья. |