Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрипт генерации случайных изображений (Защита от postinga)
 
 автор: Artemy   (29.06.2006 в 11:27)   письмо автору
423.6 Кб
 
 

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

Полная версия в атаче.

P.S Может авторы этого сайта разместят его у себя в галерии скриптов!

<?PHP
 
/******************************************************************************************
 *******************************************************************************************
 **                                                                                       **
 **                           Скрипт генерации случайных изображений                      **
 **                                      Версия: 1.0                                      **
 **                                                                                       **
 *******************************************************************************************
 ******************************************************************************************/
 
 ###########################################################################################
 #  Настройки
 ###########################################################################################
 
 
$C_IMAGE_TYPE 'PNG';            //Возможные форматы: GIF, JPEG, PNG
 
$C_WIDTH 150;                   //Ширина изображения
 
$C_HEIGHT 100;                  //Высота изображения
 
$C_FONT_SIZE = ($C_HEIGHT*1)/4;   //Размер шрифта
 
$C_NUM_GENSIGN 3;               //Количество символов, которые нужно набрать
 
$C_NUM_SIGN 30;                 //Количество символов, которые находятся на фоне
 
$path_fonts './fonts/';         //Путь к шрифтам
 
 
 ###########################################################################################
 #  Ядро
 ###########################################################################################
 
 
$CODE = array();
 
$LETTERS = array('a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','2','3','4','5','6','7','8','9');
 
$FIGURES = array('10','30','50','70','90','110','130','150','170','190','210','230','250');
 
 
//Создаем полотно
 
$src imagecreatetruecolor($C_WIDTH,$C_HEIGHT);
 
//Заливаем фон
 
$fon imagecolorallocate($src,255,255,255);
 
imagefill($src,0,0,$fon);
 
 
//Шрифты
 
$FONTS = array();
 
$dir=opendir($path_fonts);
 while(
$fontName readdir($dir)){
   if(
$fontName != "." && $fontName != ".."){
     
$FONTS[] = $fontName;
   }
 }
 
closedir($dir);
 
 
//Заливаем полотно буковками
 
for($i=0;$i<$C_NUM_SIGN;$i++){
   
$color imagecolorallocatealpha($src,rand(0,255),rand(0,255),rand(0,255),100); 
   
$font $path_fonts.$FONTS[rand(0,sizeof($FONTS)-1)];
   
$letter $LETTERS[rand(0,sizeof($LETTERS)-1)];
   
$size rand($C_FONT_SIZE-2,$C_FONT_SIZE+2);
   
//Пишем
   
imagettftext($src,$size,rand(0,45),rand($C_WIDTH*0.1,$C_WIDTH-$C_WIDTH*0.1),rand($C_HEIGHT*0.2,$C_HEIGHT),$color,$font,$letter);
 }
 
 
//Основные буковки
 
for($i=0;$i<$C_NUM_GENSIGN;$i++){
   
$color imagecolorallocatealpha($src,$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],$FIGURES[rand(0,sizeof($FIGURES)-1)],rand(20,40)); 
   
$font $path_fonts.$FONTS[rand(0,sizeof($FONTS)-1)];
   
$letter $LETTERS[rand(0,sizeof($LETTERS)-1)];
   
$size rand($C_FONT_SIZE*2.1-1,$C_FONT_SIZE*2.1+1);
   
$x = ($i+1)*($C_FONT_SIZE+3) + rand(0,5);
   
$y = (($C_HEIGHT*3)/4) + rand(0,5);
   
$h 1;
   
//Запоминаем
   
$CODE[] = $letter;
   if(
$h == rand(0,10)) $letter strtoupper($letter);
   
//Пишем
   
imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
 }
 
 
//Получаем код
 
$CODE implode('',$CODE);
 
 
//Печать
 
$C_IMAGE_TYPE strtolower($C_IMAGE_TYPE);
 if(
$C_IMAGE_TYPE != 'png' && $C_IMAGE_TYPE != 'gif' && $C_IMAGE_TYPE != 'jpeg'$C_IMAGE_TYPE != 'gif';
 
 
header ("Content-type: image/".$C_IMAGE_TYPE); 
 if(
$C_IMAGE_TYPE=='png'imagepng($src);
 else if(
$C_IMAGE_TYPE=='gif'imagegif($src);
 else if(
$C_IMAGE_TYPE=='jpeg'imagejpeg($src);
?>


Как его использовать?
На этом форуме есть тема, где разбирается этот вопрос, только вот найти немогу.

   
 
 автор: RV   (29.06.2006 в 11:35)   письмо автору
 
   для: Artemy   (29.06.2006 в 11:27)
 

сгенеринный код добавляется в сессию, а потом проверяется то, что ввел юзер с тем, что хранится в сессии

   
 
 автор: Artemy   (29.06.2006 в 12:00)   письмо автору
 
   для: RV   (29.06.2006 в 11:35)
 

Я сам это знаю, а написал из-за того что народ всетаки спрашивает как с ним работать.

   
 
 автор: cheops   (29.06.2006 в 12:31)   письмо автору
 
   для: Artemy   (29.06.2006 в 11:27)
 

Хотите мы его в раздел downloads выложим или в примеры PHP?

PS Только нужен шрифт какой-нибудь...

   
 
 автор: ап   (29.06.2006 в 12:38)
 
   для: cheops   (29.06.2006 в 12:31)
 

http://www.codenet.ru/webmast/php/Security-Images-in-PHP/

   
 
 автор: Artemy   (29.06.2006 в 12:56)   письмо автору
232 Кб
 
   для: cheops   (29.06.2006 в 12:31)
 

Конечно хочу! :)

Только надо отметить, что подходят не все шрифты, а только True Type (.ttf). В следующей версии должны поддерживаться все.

Все здесь!

   
 
 автор: Artemy   (29.06.2006 в 13:12)   письмо автору
 
   для: Artemy   (29.06.2006 в 12:56)
 

Вот примеры картинок:
http://img162.imageshack.us/img162/5200/web1oi.png
http://img117.imageshack.us/img117/3197/web5cg.png
http://img162.imageshack.us/img162/2188/web8lq.png

   
 
 автор: AKiRA   (29.06.2006 в 13:44)   письмо автору
 
   для: Artemy   (29.06.2006 в 13:12)
 

Сразу скажу, что не оптимальный сприпт.
Зачем генерировать каждый раз новый фон? Почему бы на него не накладывать?

   
 
 автор: Artemy   (29.06.2006 в 14:40)   письмо автору
 
   для: AKiRA   (29.06.2006 в 13:44)
 

А что он хлеба просит? :)

К сожалению, я не знаю алгоритм разбора такого рода изображений, но мне кажется это увеличит сложность распознания картинки.

   
 
 автор: cheops   (30.06.2006 в 13:12)   письмо автору
 
   для: Artemy   (29.06.2006 в 12:56)
 

Скрипт выложен в раздел downloads

http://www.softtime.ru/info/randomimage.php

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования