PHP создает и управляет изображениями разных форматов. Наиболее часто используются форматы jpg, gif, png. Становится популярным в вебе svg. PHP способен выводить потоковое изображение в браузер. Для этого необходима графическая библиотека GD library. Проверить, если ли доступ к ней, можно при помощи кода.
>
<?php echo phpinfo(); ?>
Файл с ним надо разместить на сервере. Открыть его в браузере, и в открывшемся списке найти секцию GD. Если она есть, значит библиотека подключена.
В PHP есть много Функций для работы с изображениями. Функция resource imagecreatetruecolor ( int $width , int $height ) в качестве аргументов принимает ширину и длину изображения. Возвращает результат с данными ресурсного типа, то есть работа с ним происходит в памяти.
Задание:
Нарисовать человечка. Без фанатизма.
Выполнение:
<?php
$im = imagecreatetruecolor(800, 800);
$c = imagecolorallocate($im, 120, 220, 150); //Создание цвета изображения
imageArc ($im, 400, 100, 150, 170, 0, 360, $c);
imageArc ($im, 400, 370, 250, 370, 0, 360, $c);
imageLine ($im, 300, 262, 150, 200, $c); //левая рука
imageLine ($im, 500, 262, 650, 200, $c); //правая рука
imageLine ($im, 320, 512, 300, 750, $c); //левая нога
imageLine ($im, 480, 512, 500, 750, $c); //правая нога
imagearc ($im, 400, 150, 30, 15, 0, 180, $c); //рот
imageFilledRectangle ($im, 330, 250, 400, 350, $c);//карман
imageRectangle ($im, 390, 90, 410, 130, $c);//нос
//снегопад
for ($i = 0; $i < 1000; $i++)
{
$x = mt_rand (0, imageSX($im));//imageSX - Получение ширины изображения
$y = mt_rand (-800, imageSY($im));
imageSetPixel ($im, $x, $y, $c);//рисует точку (пиксель) на заданных координатах.
}
Посмотреть результат выполнения скрипта в браузере.
Следующее задание:
Создать текстовое поле. Нарисовать текст, который был введен в созданное поле. Сохранить получившееся изображение в отдельный файл и вывести его на странице с формой.
Реализация:
Понимание скрипта полезно для создания простейшей каптчи. Создается файл html под названием imo.html c формой для ввода текста и отправки методом post на обработчик php под названием iso.php. Файл iso.php средствами php под управлением созданного скрипта генерирует текст, который был введен в форме файла imo.html. И если задать в этом файле редирект на предыдущую страницу, то откроется страница с формой и рисунком.
Файл imo.html.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Изображения</title>
</head>
<body>
<form action="iso.php" method="post">
<input type="text" name="x">
<input type="submit">
</form>
<br />
<img src="iso.png" alt="iso">
</body>
</html>
Файл обработчик iso.php.
<?php
$x = $_POST['x'];
$im = imageCreateTrueColor (190, 50);
$c = imageColorAllocate ($im, 255, 255, 255);
//$x = iconv ("CP1251", "UTF-8", $x); //Преобразует набор символов строки x из кодировки CP1251 в UTF-8.
imageTtfText ($im, 20, 0, 10, 30, $c, "verdana.ttf", $x);//Рисование текста на изображении шрифтом TrueType verdana.ttf
header ("Content-type: image/png");
imagePng ($im, "iso.png");
imageDestroy ($im);
header("Location: ".$_SERVER['HTTP_REFERER']); //редирект на предыдущую страницу imo.html
?>
Результат выполнения задания с изображением
Посмотреть результат выполнения скрипта про Изображения в браузере можно в новом окне.
Примечание
Для правильного функционирования этого скрипта необходима следующая запись в файле .htaccess
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/png A0
</IfModule>
Это связано с настройкой браузерного кэширования.
Если запись настройки браузерного кэширования будет, например, такой:
ExpiresByType image/png "access 1 year"
То в браузере у клиента обработчик iso.php сработает не корректно. Для получения правильного результата потребуется нажать комбинацию клавиш Ctrl+F5.