Автор Тема: GD и SetPixel  (Прочитано 5272 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн el-vis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GD и SetPixel
« : 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;

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
GD и SetPixel
« Ответ #1 : 17 Октября 2006, 18:49:38 »
Проблема в циклах. Я никак не могу понять зачем ты так их построил. Есть здесь логика?

Заодно посмотр вот здесь:
http://search.cpan.org/~burak/GD-SecurityImage-1.61/lib/GD/SecurityImage.pm
The documentations is your friend

Оффлайн el-vis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GD и SetPixel
« Ответ #2 : 17 Октября 2006, 19:14:04 »
Спасибо за ссылочку на модуль, изучаю..


 А что за проблема c циклами??  попровал с вайлом и антилом так вообще только фон выводит..
Дело в том что я нашел алгоритм для captcha где размывается по синусоиде и мне надо попиксельно считывать и рисовать...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
GD и SetPixel
« Ответ #3 : 17 Октября 2006, 19:53:25 »
При чем тут вайл и антил?

Поясните что делает вот эта строка(по каждому действию)
$im2->setPixel($x,$y,$im2->colorAllocate($im->rgb($im->getPixel($x,$y))));
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
GD и SetPixel
« Ответ #4 : 17 Октября 2006, 20:38:49 »
Вот решение,

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);
                }
}

The documentations is your friend

Оффлайн el-vis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GD и SetPixel
« Ответ #5 : 17 Октября 2006, 20:43:39 »
Хм, поясняю. передаю индекс цвета из одного объекта в другой.


$im->getPixel($x,$y) - получаем индекс цвета из исходного объекта.

$im->rgb($im->getPixel($x,$y)) - из индекса получаем массив ($r,$g,$b) с числами RGB палитры


$im2->colorAllocate($im->rgb($im->getPixel($x,$y))) - на конечном объекте определяем индекс цвета с полученными параметрами RGB.

Другого способа передать индекс цвета я не вижу...

Оффлайн el-vis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
GD и SetPixel
« Ответ #6 : 17 Октября 2006, 20:54:03 »
Я видимо плохо перевожу с английского, но я не вижу разницы между colorAllocate() и colorResolve().

Вам не трудно будет пояснить?
отсюда я наверное пойму, зачем сдвигать значения rgb

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
GD и SetPixel
« Ответ #7 : 18 Октября 2006, 01:08:34 »
Все нормально, просто он документирован плохо.
Вот вам более интересный источник:
Цитировать
http://www.douzhe.com/down/perl/Manning%20-%20Graphics%20Programming%20With%20Perl%20-%202002%20-%20(By%20Laxxuss).pdf
The documentations is your friend

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28