Forum Webscript.Ru
Программирование => Perl => Тема начата: el-vis от 17 Октября 2006, 18:33:30
-
Всем привет.
Возникло желание сделать себе captcha на сайт но столкнулся с тем что скрипт попиксельно не хочет копировать из одного объекта в другой.
Точнее копирует только маленький кусочек, в данном случае слева.
Может быть переполняется какой-то кэш?
Вот пример кода..
#!/usr/bin/perl -w
use GD;
print "Content-type: text/html\\n\\n";
$imx = 120; $imy = 32;
$im = new GD::Image($imx,$imy);
$im2 = new GD::Image($imx,$imy);
$black = $im->colorAllocate(0,0,0);
$white = $im->colorAllocate(255,255,255);
$im->fill(10,10,$black);
$im->string(gdSmallFont,2,10,"simple test", $white);
for($x=0;$x<$imx;$x++) {
for($y=0;$y<$imy;$y++) {
$im2->setPixel($x,$y,$im2->colorAllocate($im->rgb($im->getPixel($x,$y))));
}
}
binmode STDOUT;
print $im2->png;
-
Проблема в циклах. Я никак не могу понять зачем ты так их построил. Есть здесь логика?
Заодно посмотр вот здесь:
http://search.cpan.org/~burak/GD-SecurityImage-1.61/lib/GD/SecurityImage.pm
-
Спасибо за ссылочку на модуль, изучаю..
А что за проблема c циклами?? попровал с вайлом и антилом так вообще только фон выводит..
Дело в том что я нашел алгоритм для captcha где размывается по синусоиде и мне надо попиксельно считывать и рисовать...
-
При чем тут вайл и антил?
Поясните что делает вот эта строка(по каждому действию)
$im2->setPixel($x,$y,$im2->colorAllocate($im->rgb($im->getPixel($x,$y))));
-
Вот решение,
for (my $y = 0; $y < $imy; $y++)
{
for (my $x = 0; $x < $imx; $x++)
{
my $index = $im->getPixel($x, $y);
my ($r, $g, $b) = $im->rgb($index);
$index = $im2->colorResolve($b, $r, $g);
$im2->setPixel($x, $y, $index);
}
}
-
Хм, поясняю. передаю индекс цвета из одного объекта в другой.
$im->getPixel($x,$y) - получаем индекс цвета из исходного объекта.
$im->rgb($im->getPixel($x,$y)) - из индекса получаем массив ($r,$g,$b) с числами RGB палитры
$im2->colorAllocate($im->rgb($im->getPixel($x,$y))) - на конечном объекте определяем индекс цвета с полученными параметрами RGB.
Другого способа передать индекс цвета я не вижу...
-
Я видимо плохо перевожу с английского, но я не вижу разницы между colorAllocate() и colorResolve().
Вам не трудно будет пояснить?
отсюда я наверное пойму, зачем сдвигать значения rgb
-
Все нормально, просто он документирован плохо.
Вот вам более интересный источник:
http://www.douzhe.com/down/perl/Manning%20-%20Graphics%20Programming%20With%20Perl%20-%202002%20-%20(By%20Laxxuss).pdf