Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [GD] + [PHP] Странная ошибка 
:(
    Опции темы
Zhenek
Дата 19.1.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



главный фаил

Код

<?   
 // создаем изображение
$gif = ImageCreate(150,75); //создаем изображение размером 150*75
include("config.php"); // подключаем фаил настроек
  // Преобразование Windows 1251 -> Unicode
  function win2uni($s)
  {
    $s = convert_cyr_string($s,'w','i'); // преобразование win1251 -> iso8859-5
    // преобразование iso8859-5 -> unicode:
    for ($result='', $i=0; $i<strlen($s); $i++) {
      $charcode = ord($s[$i]);
      $result .= ($charcode>175)?"&#".(1040+($charcode-176)).";":$s[$i];
    }
    return $result;
  }
//
$s11=rand(1,9);
$s12=rand(1,9);
$s13=rand(1,9);
$s14=rand(1,9);
$sim1 = $s11.$s12.$s13.$s14; // строка 1 итог
$s21=rand(1,9);
$s22=rand(1,9);
$s23=rand(1,9);
$s24=rand(1,9);
$sim2 = $s21.$s22.$s23.$s24;// строка 2 итог
//

if($chto == 1) {
$a = win2uni("Впишите зачеркнутые");
$b = win2uni("Символы");
$_SESSION['key'] = $sim1;
}else {
$a = win2uni("Впишите незачеркнутые");
$b = win2uni("Символы");
$_SESSION['key'] = $sim2;
}
//



ImageFilledRectangle($gif,0,0,200,200,$bg);
//
//$lin=$tx;
ImageRectangle($gif,0,0,149,74,$ram);

imagettftext($gif,9,0,5,13,$tx,"ARIAL.TTF",$a);
imagettftext($gif,9,0,5,23,$tx,"ARIAL.TTF",$b);
//************зачеркнутые
if($verh_niz == 1) {

$ugl = rand(-15,20);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,10+$x_11,43,$tx,"ARIAL.TTF",$s11);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,25+$x_11,43,$tx,"ARIAL.TTF",$s12);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,40+$x_11,43,$tx,"ARIAL.TTF",$s13);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,55+$x_11,43,$tx,"ARIAL.TTF",$s14);
$r_y1 = rand(32,38);
$r_y2 = rand(27,38);
ImageLine ($gif, 5+$x_11, $r_y1, 80+$x_1, $r_y2, $colorz);
//************незачеркнутые
$x = $x_12;//rand(1,35);
$ugl = rand(-15,20);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,10+$x,70,$tx,"ARIAL.TTF",$s21);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,25+$x,70,$tx,"ARIAL.TTF",$s22);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,40+$x,70,$tx,"ARIAL.TTF",$s23);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,55+$x,70,$tx,"ARIAL.TTF",$s24);
// посылаем изображени
}
if($verh_niz == 2) {
$x = $x_11;//rand(1,35);
$ugl = rand(-15,20);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,10+$x,43,$tx,"ARIAL.TTF",$s21);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,25+$x,43,$tx,"ARIAL.TTF",$s22);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,40+$x,43,$tx,"ARIAL.TTF",$s23);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,55+$x,43,$tx,"ARIAL.TTF",$s24);


//************незачеркнутые
$x = $x_12;//rand(1,35);
$ugl = rand(-15,20);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,10+$x,70,$tx,"ARIAL.TTF",$s11);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,25+$x,70,$tx,"ARIAL.TTF",$s12);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,40+$x,70,$tx,"ARIAL.TTF",$s13);
$ugl = rand(-5,10);
$tx = ImageColorAllocate($gif,rand(1,255),rand(1,255),rand(1,255)); // символа
imagettftext($gif,15,$ugl,55+$x,70,$tx,"ARIAL.TTF",$s14);
$r_y1 = rand(60,68);
$r_y2 = rand(60,68);
ImageLine ($gif, 10+$x, $r_y1, 80+$x, $r_y2, $colorz);
// посылаем изображени
}


// добавленный код

// случайные параметры (можно поэкспериментировать с коэффициентами):
// частоты
$rand1 = mt_rand(700000, 1000000) / 15000000;
$rand2 = mt_rand(700000, 1000000) / 15000000;
$rand3 = mt_rand(700000, 1000000) / 15000000;
$rand4 = mt_rand(700000, 1000000) / 15000000;
// фазы
$rand5 = mt_rand(0, 3141592) / 1000000;
$rand6 = mt_rand(0, 3141592) / 1000000;
$rand7 = mt_rand(0, 3141592) / 1000000;
$rand8 = mt_rand(0, 3141592) / 1000000;
// амплитуды
$rand9 = mt_rand(400, 600) / 100;
$rand10 = mt_rand(400, 600) / 100;
 
for($x = 0; $x < $width; $x++){
  for($y = 0; $y < $height; $y++){
    // координаты пикселя-первообраза.
    $sx = $x + ( sin($x * $rand1 + $rand5) + sin($y * $rand3 + $rand6) ) * $rand9;
    $sy = $y + ( sin($x * $rand2 + $rand7) + sin($y * $rand4 + $rand8) ) * $rand10;
 
    // первообраз за пределами изображения
    if($sx < 0 || $sy < 0 || $sx >= $width - 1 || $sy >= $height - 1){ 
      $color = 255;
      $color_x = 255;
      $color_y = 255;
      $color_xy = 255;
    }else{ // цвета основного пикселя и его 3-х соседей для лучшего антиалиасинга
      $color = (imagecolorat($gif, $sx, $sy) >> 16) & 0xFF;
      $color_x = (imagecolorat($gif, $sx + 1, $sy) >> 16) & 0xFF;
      $color_y = (imagecolorat($gif, $sx, $sy + 1) >> 16) & 0xFF;
      $color_xy = (imagecolorat($gif, $sx + 1, $sy + 1) >> 16) & 0xFF;
    }



    // сглаживаем только точки, цвета соседей которых отличается
    if($color == $color_x && $color == $color_y && $color == $color_xy){
      $newcolor=$color;
    }else{
      $frsx = $sx - floor($sx); //отклонение координат первообраза от целого
      $frsy = $sy - floor($sy);
      $frsx1 = 1 - $frsx;
      $frsy1 = 1 - $frsy;

      // вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
      $newcolor = floor( $color    * $frsx1 * $frsy1 +
                         $color_x  * $frsx  * $frsy1 +
                         $color_y  * $frsx1 * $frsy  +
                         $color_xy * $frsx  * $frsy );
    }
    imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newcolor, $newcolor, $newcolor));
  }
}

// конец добавленного кода




    //    header("content-type: image/png");
        Imagepng($img2); // если сюда поставить $gif  все работает
  imagedestroy($image);                // освобождаем память, выделенную для изображения
           ?>


Config.php

Код

<?
session_start();      
$col = ImageColorAllocate($gif,0,0,0); //цвет текста главной надписи



$b_ugl = rand(-20,25); //угл наклона второй части символов  от 10 до 15
$plus_ugl = rand(-10,10);//угл наклона плюса от 1 до 10
$type = "1";//тип рисунка   1= квадратики   2 кружочки
$bg = ImageColorAllocate($gif,255,255,255); // цвет фона
$tx = ImageColorAllocate($gif,0,0,0); // цвет текста
$ram = ImageColorAllocate($gif,128,128,0);//цвет рамки
$lin = ImageColorAllocate($gif,255,255,255);//цвет штриха  желательно как и фон
$x_11 = rand(1,35);
$x_12 = rand(1,35);
//настройки рисунка круги
$colorz = ImageColorAllocate($gif,0,0,255); // цвет линии
$chto = rand(1,2); //выбираем какие надо вписать зачеркнутые или нет
$verh_niz = rand(1,2); //выбираем какие символы буду сверху..зачеркнутые или нет
        ?>



Хотел сделать искажение своей капчи по алгоритму данному на captcha . ru   но выдает ошибку(((

Код дабвленный прокоментировал откуда начался и закончился

--------------------
<удалено администрацией>
PM MAIL   Вверх
skyboy
Дата 19.1.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



Цитата(Zhenek @  19.1.2010,  13:11 Найти цитируемый пост)
   но выдает ошибку(((

правильно написать так:
Цитата

при выполнении кода выбрасывает ошибку такую-то, ругается на строку такую-то, которая в приведенном мною коде под номером таким-то и помечена комментарием


PM MAIL   Вверх
Zhenek
Дата 19.1.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



Warning: imagepng(): supplied argument is not a valid Image resource in Z:\home\cp.ru\www\5\captcha.php on line 183

183 :      Imagepng($img2); // если сюда поставить $gif  все работает , но тогда капча будет без волнового искаженитя
--------------------
<удалено администрацией>
PM MAIL   Вверх
skyboy
Дата 19.1.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 3
Всего: 260



ну, и где у тебя в коде создается ресурс и заносится в переменную $img2?
PM MAIL   Вверх
Zhenek
Дата 19.1.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



ой. это просто во время эксперементов не убрал...
Елси сменить на $gif  все $img2   то ошибка не исчезнет
--------------------
<удалено администрацией>
PM MAIL   Вверх
Ипатьев
Дата 19.1.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: нет
Всего: 37



при таком подходе к ошибкам я не удивлюсь, если там уже будет другая smile
PM MAIL   Вверх
Zhenek
Дата 19.1.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



Я специально выложил весь код,чтоб в случае чего вы могли попробовать у себя,а не гадать..

код капчи работает на 100%.

Я решил ее усилить и воткнул в нее алгоритм multiwave

вот его код :


Код

// добавленный код

// случайные параметры (можно поэкспериментировать с коэффициентами):
// частоты
$rand1 = mt_rand(700000, 1000000) / 15000000;
$rand2 = mt_rand(700000, 1000000) / 15000000;
$rand3 = mt_rand(700000, 1000000) / 15000000;
$rand4 = mt_rand(700000, 1000000) / 15000000;
// фазы
$rand5 = mt_rand(0, 3141592) / 1000000;
$rand6 = mt_rand(0, 3141592) / 1000000;
$rand7 = mt_rand(0, 3141592) / 1000000;
$rand8 = mt_rand(0, 3141592) / 1000000;
// амплитуды
$rand9 = mt_rand(400, 600) / 100;
$rand10 = mt_rand(400, 600) / 100;
 
for($x = 0; $x < $width; $x++){
  for($y = 0; $y < $height; $y++){
    // координаты пикселя-первообраза.
    $sx = $x + ( sin($x * $rand1 + $rand5) + sin($y * $rand3 + $rand6) ) * $rand9;
    $sy = $y + ( sin($x * $rand2 + $rand7) + sin($y * $rand4 + $rand8) ) * $rand10;
 
    // первообраз за пределами изображения
    if($sx < 0 || $sy < 0 || $sx >= $width - 1 || $sy >= $height - 1){ 
      $color = 255;
      $color_x = 255;
      $color_y = 255;
      $color_xy = 255;
    }else{ // цвета основного пикселя и его 3-х соседей для лучшего антиалиасинга
      $color = (imagecolorat($gif, $sx, $sy) >> 16) & 0xFF;
      $color_x = (imagecolorat($gif, $sx + 1, $sy) >> 16) & 0xFF;
      $color_y = (imagecolorat($gif, $sx, $sy + 1) >> 16) & 0xFF;
      $color_xy = (imagecolorat($gif, $sx + 1, $sy + 1) >> 16) & 0xFF;
    }



    // сглаживаем только точки, цвета соседей которых отличается
    if($color == $color_x && $color == $color_y && $color == $color_xy){
      $newcolor=$color;
    }else{
      $frsx = $sx - floor($sx); //отклонение координат первообраза от целого
      $frsy = $sy - floor($sy);
      $frsx1 = 1 - $frsx;
      $frsy1 = 1 - $frsy;

      // вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
      $newcolor = floor( $color    * $frsx1 * $frsy1 +
                         $color_x  * $frsx  * $frsy1 +
                         $color_y  * $frsx1 * $frsy  +
                         $color_xy * $frsx  * $frsy );
    }
    imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newcolor, $newcolor, $newcolor));
  }
}

// конец добавленного кода



Я просто непонимаю как его встроить в мой.

Этот код применяется в KCaptcha.


Эксперементировал по всякому  меняя названия переменных   $img2   на мою $gif  

и выводя   в    Imagepng($img2); 

тут если заменить на $gif  то все будет работать,но без работы алгоритма  multiwave.

Попробуйте поставте себе плиз и проверьте, может я где туплю   smile 

--------------------
<удалено администрацией>
PM MAIL   Вверх
Ипатьев
Дата 19.1.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: нет
Всего: 37



Вы меня извините, конечно, но у меня на работе своих таких кодов десяток. И в каждом ошибка.
Назовите хоть одну причину, по которой я должен заниматься отладкой вашего кода, а не своего.

Если вы хотите капчу с этим алгоритмом - возьмите готовую. Если хотите научиться программировать - учитесь отладке в первуб очередь.
Для начала поумите простую вещь, что код, который выдает ошибку на одном компьютере, модет выдавать на другом совсем другую. 



PM MAIL   Вверх
Zhenek
Дата 19.1.2010, 20:08 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 31.5.2007

Репутация: нет
Всего: 1



Цитата

Вы меня извините, конечно, но у меня на работе своих таких кодов десяток. И в каждом ошибка.
Назовите хоть одну причину, по которой я должен заниматься отладкой вашего кода, а не своего.

Если вы хотите капчу с этим алгоритмом - возьмите готовую. Если хотите научиться программировать - учитесь отладке в первуб очередь.
Для начала поумите простую вещь, что код, который выдает ошибку на одном компьютере, модет выдавать на другом совсем другую. 


Я поражаюсь!

Покажите где я просил вас помчь мне?
Это форум.Я уже не один час мучаюсь с этим кодом.
Я думаю из тысячи человек на форуме найдется такой,кто поможет так как я помогал многим, устанавливая изх коды.
Форум и основан на взаимопомощи.

Если вы этого не знаете,то вспомните себя когда начинали и ваши вопросы на форумах.

А если вы так заняты, то не помогайте. Найдутся другие!

ИМХО
--------------------
<удалено администрацией>
PM MAIL   Вверх
Ипатьев
Дата 19.1.2010, 22:38 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: нет
Всего: 37



Дело не в том, кого просят помочь.
А в том, что это работа. Тяжелая и кропотливая.
И надо учиться ее делать. А не ждать, пока сделает за тебя кто-то другой.

Как именно вы не один час мучались? Что конкретно делали? Вы даже ошибку не удосужились прочесть.
И никто на форуме до сих пор не знает, какую ошибку выдает ваш скрипт. 
И вместо того, чтобы попрекать и поучать меня, стоило бы наконец-то разобраться с именами переменных в своем коде и после этого прочесть наконец сообщение об ошибке. 
PM MAIL   Вверх
IgorIV
Дата 20.1.2010, 20:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 1
Всего: 8



Zhenek, ну нашёлся я и что? Тебе сразу код выложить - copy-paste? Смысл?
1 Выводи ошибки в браузер
2 Для шрифта заведи переменную, да и вообще везде всё на переменных надо.
3 На каком омновании ты решил что надо менять img2 на gif?
По сути после исправления ошибок и гугля понадобилось добавить одну строчку

 $img2=imagecreatetruecolor(ImageSX($gif), ImageSY($gif)); 

user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.