Пользователь:    Пароль:    Запомнить     
 

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

Опубликовано admin-ом в категории php

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

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

С теорией разобрались, с задачей определились - теперь самое время приступить к практике. Для начала нам придется убедиться что на сервере установлена библиотека GD - именно она нам понадобится для "рисования". Впишите в какой-либо файл

  1. <?php
  2. ?>

Перед вами появится информация о PHP - версия, установленные расширения и т.д. Если вы увидиту GD Support enabled значит все в порядке. Давайте создадим файл str2img.php, в который запишем следующий код (чтобы было понятнее, каждая строка содержит комментарий):

  1. $mystr = $_GET["mystr"];//переменная $mystr будет содержать значение, которое мы передадим в данный файл
  2. $im = imagecreate (220, 16); // создадим картинку шириной 200 и высотой 16 пикселов
  3. $bg = imagecolorallocate ($im, 245, 245, 245); //зададим цвет бекграунда (255 - белый, 0 - черный)
  4.  
  5. for ($i = 0; $i < strlen($mystr); $i++) { //запустим цикл, который выполнится столько раз сколько символов в нашем слове
  6.     $color = imagecolorallocate ($im, 0, 0, 0); //зададим цвет для символов (255 - белый, 0 - черный)
  7.     $x = 8+$i * 8; // каждый новый символ нарисуем на 8 пикселов правее
  8.     $y = 0; // поскольку пишем в одну строку, горизонтальные координаты = 0
  9.     imagechar($im, 2, $x, $y, $mystr[$i], $color);
  10. }
  11.  
  12. header("Content-type: image/png");
  13. echo imagepng($im); // показываем нарисованное
  14. imagedestroy($im); // освобождаем память
  15.  


Данный файл нарисует нам все, что мы ему передадим методом GET, вот пример:
  1. <img src="str2img.php?mystr=hosting from webamator.net" />

Вместо фразы hosting from webamator.net можете передавать нужное значение - к примеру, как и было сказано вначале, адреса электронной почты, которые будут "спрятаны" от парсеров. Можете посмотреть действующий пример данного скрипта.

  отпавить с помощью email кому-нибудь   для печати   просмотр в pdf