Небольшая функция генерации капчи для perl при помощи вызова imagemagick через библиотеку Image::Magick.
Может пригодиться в том случае, когда хостер не позволяет устанавливать свои модули для perl (например GD::SecurityImage или Auchten::Captcha). Модуль для работы с ImageMagick не стоит по умолчанию разве что у самого нерадивого хостера.
Функцию можно использовать как библиотечный вызов, при вызове передавать имя файла и строку для генерации капчи.
Есть что сказать? Не стесняйся — комментируй!
Здесь тебе на райсобес — подпишись на RSS!
#!/usr/bin/perl # Генератор капчи. Идея и параметры вызова Convert взяты с captcha.ru (http://captcha.ru/captchas/multiswirl/). # Реализация под библиотеку Image::Magick для perl - dimio (www.dimio.org). # 27.09.2009 use Image::Magick; sub CreateCapImage($$){ my($cap_string,$filename) = @_; my $font = 'times.ttf'; #можно указать шрифт my $pointsize = 70; my $path = './'; my $image = new Image::Magick; # 1. Создаём поле 300x100 белого цвета. $image->Set(size => '300x100'); $image->ReadImage('xc:white'); # 2. Печатаем черным с антиалиасингом $image->Set( type => 'TrueColor', antialias => 'True', fill => 'black', # строку STRING шрифтом $font размером $pointsize font => $font, pointsize => $pointsize, ); $image->Draw( primitive => 'text', points => '20,70', # ориентация строки текста внутри картинки text => $cap_string, # что печатаем ); # 3. Подвинуть центр влево на 100 точек +случайная флуктуация $image->Extent( geometry => '400x120', # меняем размер картинки ); $image->Roll( x => 101+int(rand(4)), ); # 4. Первый swirl на случайный угол (от 37 до 51) $image->Swirl( degrees => int(rand(14))+37, ); # 5. Подвинуть центр вправо на 200 точек, тоже со случайной флуктуацией $image->Extent( geometry => '600x140', # меняем размер картинки ); $image->Roll( x => 3-int(rand(4)), ); # 6. Второй поворот (от 20 до 35) $image->Swirl( degrees => int(rand(15))+20,, ); # 7. Окончательная обработка и вывод $image->Crop('300x100+100+17'); $image->Resize('150x50'); $filename = $path . $filename; $filename .= '.png'; open(IMAGE,'>',$filename) or die $!; $image->Write(file=>\*IMAGE, filename=>$filename); close(IMAGE); return $filename; } 1; !/usr/bin/perl unshift (@INC, "./captcha"); require "captcha.pl"; # Вызов капчи из скрипта my $num1 = int(rand(11))+int(rand(3)); my $num2 = int(rand(8))+int(rand(4)); my $sum = $num1+$num2; my $cap_string = $num1.'+'.$num2.'='; my $cap_digest = md5_hex($sum+rand(100)+rand(50)); my $cap_url = &amp;CreateCapImage($cap_string,$cap_digest); $cap_url =~ s|/full/path/to/captcha_dir||; $cap_url = 'http://www.dimio.org'.$cap_url; print "<img src=\"$cap_url\" />";
В результате на странице будет выведена картинка с символами вида «12+7=». Строка в принципе может быть какой угодно.
Кому лень копипастить — может скачать функцию captcha.pl и три ttf шрифта.
Написано на правах памятки для себя, но вдруг кому пригодитсяНужна помощь? Обращайся через комментарии!
Чтобы жизнь была как праздник — RSS читай, проказник!
Здесь можно оставить свои комментарии. Выпуск подготовленплагином wordpress для subscribe.ru
0 коммент.:
Отправить комментарий
Спасибо за комментарий!