Построение динамических изображений

Задача
Необходимо создать изображение, основанное на имеющемся шаблоне и динамических данных (как правило, на тексте). Например, надо создать счетчик выполнения.

Решение
Загрузите шаблон изображения, найдите правильное положение, чтобы соответствующим образом отцентрировать текст, добавьте текст к области изображения и пошлите изображение броузеру:

// Конфигурационные настройки
$image = ImageCreateFromPNG('button.png');
$text = $_GET['text'];
$font = ImagePSLoadFont('Times');
$size = 24;
$color = ImageColorAllocate($image, 0, 0, 0); // черный
$bg_color = ImageColorAllocate($image, 255, 255, 255); // белый
// Печатаем центрированный текст
list($x, $y) = pc_ImagePSCenter($image, $text, $font, $size);
ImagePSText($image, $text, $font, $size, $color, $bg_color, $x, $y);
// Посылаем изображение
header('Content-type: image/png');
ImagePNG($image);
// Удаляем
ImagePSFreeFont($font);
ImageDestroy($image);

Обсуждение
Строить динамические изображения с помощью библиотеки GD довольно легко, достаточно объединить несколько рецептов вместе.


В на-чале программы из раздела «Решение» мы загружаем изображение из запаса шаблонов кнопок; оно играет роль фона, на который накладывается текст. Считаем, что текст поступает прямо из строки запроса. В качестве альтернативы можно получить текст из базы данных (в случае счетчиков доступа) или с удаленного сервера (котировки акций или пиктограммы прогноза погоды).

После этого мы продолжаем работать с другими параметрами: загружаем шрифт и указываем его размер и цвет, а также цвет фона. Однако перед тем как печатать текст, необходимо вычислить его местоположение; функция pc_ImagePSCenter().Наконец, мы выдаем изображение и удаляем шрифт и зображение из памяти.

Например, следующий фрагмент кода генерирует HTML-страницу и теги изображения с динамическими кнопками.
if (isset($_GET['button'])) {
// Параметры конфигурации
$image = ImageCreateFromPNG('button.png');
$text = $_GET['button']; // динамически сгенерированный текст
$font = ImagePSLoadFont('Times');
$size = 24;
$color = ImageColorAllocate($image, 0, 0, 0); // черный
$bg_color = ImageColorAllocate($image, 255, 255, 255); // белый
// Печатаем центрированный текст
list($x, $y) = pc_ImagePSCenter($image, $text, $font, $size);
ImagePSText($image, $text, $font, $size, $color, $bg_color, $x, $y);
// Посылаем изображение
header('Content-type: image/png');
ImagePNG($image);
// Удаляем
ImagePSFreeFont($font);
ImageDestroy($image);
} else {
?>


Sample Button Page


alt="Previous" width="132" height="46"> alt="Next" width="132" height="46">
}
?>

В этом сценарии, если значение для переменной $_GET['button'] передано, мы генерируем кнопку и посылаем броузеру PNG.


Если значение переменной $_GET['button'] не установлено, мы печатаем базовую HTML-страницу с двумя внедренными обратными вызовами сценария с запросами для каждой кнопки – один для кнопки Previous (предыдущая) и один для кнопки Next (следующая). Общим решением будет создание отдельной страницы button.php, которая возвращает только картинки и устанавливает источник изображения по адресу этой страницы.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Безопасная работа с изображениями
Программа: создание гистограмм результатов голосования
Рисование дуг, эллипсов и окружностей
Рисование линий, прямоугольников и многоугольников
Рисование текста

Вернуться в раздел: PHP / 15. Графика