#!/usr/bin/perl # Генератор капчи. Идея и параметры вызова Convert взяты с captcha.ru (http://captcha.ru/captchas/multiswirl/). # Реализация под библиотеку Image::Magick для perl - dimio (www.dimio.org). # 27.09.2009 use Image::Magick; CreateCapImage('123test=', "./cap_test"); exit; 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;