Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

PHP в примерах, просто о сложном


 

Рассылка PHP в примерах.
Выпуск : 10
Тема выпуска:php и работа с изображениями
Автор:Велько Антон(levis)
Email:levis@mail.by
Форум рассылки http://webdip.ucoz.ru/forum/

От автора

Ну вот еще 1 выпуск рассылки, после долгого простоя, я снова с вами. И готов делиться своими знаниями.

У рассылки теперь появилось 2 новых блока: Домашнее задание(Д/з) и Расписание.
В Д/з, я буду публиковать различные вопросы, на которые вы если хотите конечно должны найти ответы, и прислать мне на email.
А в расписании, публикуются темы трех следующих выпусков.

Также, если вы заметили, то теперь у php кода появилась цветовая подсветка.

 

О выпуске

Сегодня мы рассмотрим функции для работы с изображениями. А если точнее то будут приведены примеры наложения текста на картинку, а также скрипт защиты от автоматических регистраций.

 

О главном

У php имеется большой набор функций для работы с изображениями,PDF документами, dba форматом. Сегодня мы рассмотрим работу php с изображениями.
Все возможности работы php с изображениями вы можете найти на официальном сайте php.net. Мы рассмотрим лишь некоторые.

Давайте создадим простой черный квадрат со стороной 100 пикселов.

<?php
Header
("Content-type: image/gif");
$image=imagecreate(100,100);
imageGif($image);
?>

Header("Content-type: image/gif")-эта строка посылает заголовок браузеру, что на данный момент надо обработать gif-изображение. Что касается других MIME типов(разрешений) мы к ним еще вернемся.

Во второй строке собственно происходит само создание нашего квадрата. Функция imagecreate-имеет простой синтаксис:

Imagecreate(ширина,высота) -ширина и высота указываются в px.
Созданный функцией imagecreate квадрат мы запихнули в переменную $image.
Ну а последняя строка, отвечает за сам вывод нашего квадрата в браузер.

Вы наверняка уже заметили, что в коде мы не указали цвет заливки нашего квадрата, правильно! По умолчанию созданный нами квадрат приобретает черный цвет. Давайте,исправим это, и зальем его синим цветом.

<?php
Header("Content-type: image/gif");
$image=imagecreate(100,100);
ImageColorAllocate($image, 0,26,154);
imageGif($image);
?>

С помощью ImageColorAllocate мы заливаем наше изображение темно-синим цветом. Эта функция возвращает цвет в RGB схеме. И имеет такой синтаксис

imagecolorallocate(ваше изображение,красный,зеленый,синий).

Давайте немного "украсим" наш квадрат: добавим текст:

<?php
Header
("Content-type: image/gif");
$image=imagecreate(100,100);
ImageColorAllocate($image, 0,26,154);
$textcolor=ImageColorAllocate($image,255,255,50);
imagestring($image,2,4,25,'webdip.ucoz.ru', $textcolor);
imageGif($image);
?>

Здесь у нас 2 новые функции ImageColorAllocate и Imagestring
ImageColorAllocate-определяет цвет, в нашем случае через нее мы выбираем каким цветом будет написан наш текст с помощью RGB.Синтаксис совпадает с ImageColorAllocate!

Imagestring - А вот эта накладывает текст на наш квадрат. И имеет следующий синтаксис:

Сначала указывается изображение на которое мы накладываем текст, в нашем случае это $image,дальше мы выбираем размер шрифта, у нас это 2,следующие 2 числа 4 и 25 соответственно -это начальная позиция текста по x и y.После идет сам текст, который мы накладываем, и в конечном случае мы прописываем цвет текста, в нашем случае, это цвет который возвратила ImageColorAllocate.

Между прочим php,может работать не тольно с созданными в нем изображениями, но и с внешними. Что значит что мы может наложить этот текст на любое изображение. Наверно у многих из вас,на компьютере есть различные изображения скаченные с сайтов, где в самом низе есть приписка- с какого сайта скачан это рисунок. Мы сейчас проделаем тоже самое. Приступим:

<?php
Header("Content-type: image/gif");
$image=imagecreatefromgif("image.gif");
$textcolor=ImageColorAllocate($image,255,255,50);
imagestring($image,2,4,25,'webdip.ucoz.ru', $textcolor);
imageGif($image);
?>

Как видите мы заменили лишь одну строку в нашем коде(и 1 удалили)!
Imagecreatefromgif- с помощью этой функции можно открывать внешние изображения.
Но, согласитесь что в серьезном приложение данную функцию использовать нельзя, ведь цвет шрифта может совпадать с цветом фона. Это и будет вашим домашним заданием, если есть желание присылайте ваши работы мне на email или на форуме
Итак.. Давайте дальше..

На форуме было проведено голосование, где спрашивалось- Какой пример привести в следующем выпуске. Как я и думал победил вариант, где предлагалось создать систему защиты от автоматических регистраций, именуемой по другому CAPTCHA. Каждый из вас вводил в поле текст изображенный на картинке. Сейчас мы сделаем такой же.
Нам понадобятся 2 файла

Nospam.php-файл генерации рисунка

<?php session_start();
//стартуем сессию
$_SESSION['protect']=mt_rand("1111","9999");
//генирируем случаное число от 1111 до 9999 и суем в переменную сессии
Header("Content-type: image/gif");
$image=imagecreate(100,50);
//Создаем холст
ImageColorAllocate($image,100,100,100);
//заливаем его цветом
$textcolor=ImageColorAllocate($image,0,0,0);
//определяем цвет текста
imagestring($image,5,26,19,$_SESSION['protect'], $textcolor);
//выводим текст сгенерированный mt_rand на изображение
imageGif($image);
?>


Index.php-файл проверки

<?php session_start();
echo "<img src=nospam.php>";
//выводим рисунок сгенерированный в файле nospam.php и форму
<form method=POST>
<input type=text name=text>
<input type=submit name=go>"
;
if(isset($_POST['go'])){
if($_POST['text']==$_SESSION['protect']){echo "Верно";}else{echo "Поробуйте еще раз";}
//проверяем равен ли текст посланный через форму тому числу что мы сгенерировали в файле nospam.php.
}
session_unregister('protect');
?>

Как видите все очень просто.Логика:
Сначала мы генерируем число, с помощью mt_rand.И суем его в сессию. А потом выводим это число на изображение.

Теперь запустите в браузере, файл index.php и протестируйте скрипт. Модифицировать наш скрипт можно <бесконечно долго>. Начиная от добавления шума на фон, заканчивая рандомным цветом текста, фона и т.д. http://www.captcha.ru/ -сайт, где вы можете скачать, самый защищенный скрипт защиты от автоматических регистраций. Я советую вам изучить код, этого скрипта и кое-какие моменты импортировать в наш с вами скрипт.

Вы конечно можете обвинить меня в том, что количество информации, касающийся работы php с изображениями, чрезмерно мало, что ж вы будете правы. Чтобы описать все возможности, мне бы пришлось посвятить этому 3-4 выпуска. Поэтому я даю вам ссылку на официальное описание image функций в php.Читать:
И не перестаю рекламировать наш форум,заходите пишите если что непонятно.

И еще...Во всех примерах я демонстрировал GIF формат. Чтобы те же самые функции работали с JPEG и PNG форматами, необходимо изменить приписку gif на jpeg или png.К примеру

Imagecreategif=>imagecreatejpeg=>imagecreatepng

 

Вопросы

Нет, народ так дело не пойдет. У рассылки 800 подписчиков, и ни у кого из вас нету вопросов? Не верю! У меня начинает складываться впечатление, что эта рассылка толком ни кому не нужна.

Д/з

Модифицировать наш скрипт наложения текста на картинку, так чтобы цвет текста не совпадал с фоном. То есть, сделать его более универсальным, приспособить для работы с любым изображением. Ваши работы если хотите присылайте мне на email levis@mail.by

Расписание

11) MySql и все вытекающие.
12)Делаем новостую ленту
13)Работа php с PDF и DBA форматом

Заключение

В этом выпуске, мы рассмотрели самые азы работы с image.А также я описал вам логику действия CAPTCH'I,и привел действующий пример.

Удачи вам во всех ваших экспериментах(в php конечно, а вы о чем подумали?)

 


В избранное