Статьи, пособия, примеры начинающим вебмастерам.

Горячий поиск: PHP CSS SEO
Главная » ГлавнаяPHP/MySQL Рисуем в PHP - GD для начинающих

Рисуем в PHP - GD для начинающих

Когда-то, описывая тег hr, я обратил внимание, что это единственный тег в html, который хоть что-то рисует. И действительно, в html вся графика не рисуется а вставляется из внешних обьектов. Давным-давно, когда серверы были большими а процессоры у них были слабыми PHP тоже не умел рисовать - ведь он создавался для работы с текстом. Однако сегодня возросли как мощности серверов, так и потребности пользователей. В качестве примера динамически сгенерированных изображений могу привести всем известную CAPTCHA. Или водяные знаки для картинок - так называемые wotermark. Или динамические юзербары для форумов. Или... а давайте напишем небольшой скрипт, который нам послужит и уроком и примером одновременно?

Вначале немного о том, что мы будем делать + немного теории. Итак, предположим у нас имеется некий сайт, на котором посетители могут регистрироваться и указывать свои контактные данные (телефон, e-mail, ICQ). И мы хотим защитить наших посетителей от спамеров. Ведь как спамеры собирают свои базы? Спамер запускает специальный скрипт (парсер), который ищет на сайте все комбинации символов, среди которых имеется знак @. Задача парсера - найти все, что попадает под формулу ***@***.*** (вместо звездочек любые символы) - это и будет адрес электронной почты. Вначале от подобных парсеров защищались, заменой в электронном адресе символа @ на что-то другое, например (a) или (at) - возможно вы встречали подобные "замаскированные" email-ы. Но разработчики парсеров не сидят на месте - ведь "обьяснить" скрипту что цель парсинга вместо @ может содержать (a) или (at) не очень сложно даже для начинающего программиста.
Но если вместо комбинации символов ***@***.*** будет изображение, то парсер не примет его за адрес электронной почты. Посмотрите живой пример в действии - попробуйте ввести google.com.ua и посмотрите его данные. Обратите внимание на значения e-mail. Это картинка, которую легко прочитает человек но которую пропустит программа-парсер. Давайте сделаем нечто подобное себе.

С теорией разобрались, с задачей определились - теперь самое время приступить к практике. Для начала нам придется убедиться что на сервере установлена библиотека GD - именно она нам понадобится для "рисования". Впишите в какой-либо файл
<?php
phpinfo();
?>
Перед вами появится информация о PHP - версия, установленные расширения и т.д. Если вы увидиту GD Support enabled значит все в порядке. Давайте создадим файл str2img.php, в который запишем следующий код (чтобы было понятнее, каждая строка содержит комментарий):
$mystr = $_GET["mystr"];//переменная $mystr будет содержать значение, которое мы передадим в данный файл
$im = imagecreate (220, 16); // создадим картинку шириной 200 и высотой 16 пикселов
$bg = imagecolorallocate ($im, 245, 245, 245); //зададим цвет бекграунда (255 - белый, 0 - черный)

for ($i = 0; $i < strlen($mystr); $i++) { //запустим цикл, который выполнится столько раз сколько символов в нашем слове
$color = imagecolorallocate ($im, 0, 0, 0); //зададим цвет для символов (255 - белый, 0 - черный)
$x = 8+$i * 8; // каждый новый символ нарисуем на 8 пикселов правее
$y = 0; // поскольку пишем в одну строку, горизонтальные координаты = 0
imagechar($im, 2, $x, $y, $mystr[$i], $color);
}

header("Content-type: image/png");
echo imagepng($im); // показываем нарисованное
imagedestroy($im); // освобождаем память

Данный файл нарисует нам все, что мы ему передадим методом GET, вот пример:
<img src="str2img.php?mystr=hosting from webamator.net" />
Вместо фразы hosting from webamator.net можете передавать нужное значение - к примеру, как и было сказано вначале, адреса электронной почты, которые будут "спрятаны" от парсеров. Можете посмотреть действующий пример данного скрипта.
Категория: PHP/MySQL
Опубликовано: 16 ноября 2010, просмотров: 2470
 (Голосов: 3)

Комментирование данной новости запрещено.
Чужих не бывает

Валидация

Правильний CSS!

Valid XHTML 1.0 Transitional

Статистика

Генерация страницы: 0.33 секунд, SQL-запросов: 10.

Copyright

© 2008-2013 webamator.ru

Условия заимствования материалов.