Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод нарисованной на PHP картинки
 
 автор: Pipish   (17.07.2006 в 19:36)   письмо автору
 
 

В общем я нарисовал картинку. Если вывожу только её, то всё нормально , но если после неё какой-то текст, то текст не выводится, а если текст перед ней, выводится текст и код картинки типа такого:
‰PNG  IHDRИdLди\*IDATxњнЭ_h•uЗспччмt¦;g9зЩС!“НїбB©Д?m‰ЎІ@‘.кў J$+лў‚RJ/кВА.$Љў« ИBPФ MМ¤щwРFџНmЪ9nєy~ї.&&їЧО9ПчyћНПлj|ЩyцѓЅ9њэћ?cc шM…Ѕ??€@X aЃ„"€@X aЃ„"€@X aЃ„"€@X aЃ„"€@X aЃ„"€@X aЃ„"КВэсWх'ћґC*IqGЎт‰#и°

Наверное надо что-то посылать в заголовках но я не знаю что!

   
 
 автор: Trianon   (17.07.2006 в 19:51)   письмо автору
 
   для: Pipish   (17.07.2006 в 19:36)
 

так Вы текст выводите или картинку?

   
 
 автор: Pipish   (17.07.2006 в 19:54)   письмо автору
 
   для: Trianon   (17.07.2006 в 19:51)
 

Вывожу всё.

   
 
 автор: Trianon   (17.07.2006 в 19:57)   письмо автору
 
   для: Pipish   (17.07.2006 в 19:54)
 

Единым вызовом скрипта Вы не сможете вывести всё. У Вас получится вывести лишь что-то одно.

   
 
 автор: Pipish   (17.07.2006 в 20:08)   письмо автору
 
   для: Trianon   (17.07.2006 в 19:57)
 

Я делаю защиту от спам-роботов. Страница выклядит примерно так:

<html>
Различный текст и навигация
<?php
            
//здесь я рисую картинку и вывожу её
?>
Различный текст и навигация
</html>


Вот что из этого получается:

Различный текст и навигация
‰PNG  IHDRИdLди\*IDATxњнЭ_h•uЗспччмt¦;g9зЩС!“НїбB©Д?m‰ЎІ@‘.кў J$+лў‚RJ/кВА.$Љў« ИBPФ MМ¤щwРFџНmЪ9nєy~ї.&&їЧО9ПчyћНПлj|ЩyцѓЅ9њэћ?cc шM…Ѕ??€@X aЃ„"€@X aЃ„"€@X aЃ„"€@X aЃ„"€@X aЃ„"€@X aЃ„"КВэсWх'ћґC*IqGЎт‰#и° 
Различный текст и навигация

   
 
 автор: Trianon   (17.07.2006 в 20:39)   письмо автору
 
   для: Pipish   (17.07.2006 в 20:08)
 


<html> 
Различный текст и навигация 
<?php 
        
//здесь надо рисовать 
        //  <img src="http://URL-запроса-к-скрипту-генерирующему-картинку">
        // а саму картинку рисовать уже в том скрипте, предваряя заголовком 
       // соотв. типа документа
?> 
Различный текст и навигация 
</html>  

   
 
 автор: Pipish   (17.07.2006 в 21:19)   письмо автору
 
   для: Trianon   (17.07.2006 в 20:39)
 

Работает, НО я не знаю что нарисовано на картинке, как получить ту переменную со строкой?

   
 
 автор: cheops   (18.07.2006 в 00:22)   письмо автору
 
   для: Pipish   (17.07.2006 в 21:19)
 

>Работает, НО я не знаю что нарисовано на картинке, как
>получить ту переменную со строкой?
Ту, это которую?

   
 
 автор: Pipish   (18.07.2006 в 09:31)   письмо автору
 
   для: cheops   (18.07.2006 в 00:22)
 

Вот мой скрипт:

<?php
$width 
120;
$height 40;
$img_type "gif";
$font_name="smash.ttf";
$font_size=20;
$numb=4;
$str="";
$abs = array('a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9');
for(
$i=1;$i<=$numb;$i++)

 
$cv=rand(0,31);
 
$str="$str$abs[$cv]";
}

//полотно
$image imagecreatetruecolor($width$height);
$foncolor=imagecolorallocate($image107120237);
imagefill($image,0,0,$foncolor);

//рисуем
$white imagecolorallocate($image255255255);
imagettftext ($image$font_size222$white$font_name$str); 

//выводим
header ("Content-type: image/".$img_type);
imagegif($image);
?>

Если делать как сказал Trianon, то я не знаю как получить переменную $str.

   
 
 автор: Trianon   (18.07.2006 в 09:51)   письмо автору
 
   для: Pipish   (18.07.2006 в 09:31)
 

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

   
 
 автор: Pipish   (18.07.2006 в 10:00)   письмо автору
 
   для: Trianon   (18.07.2006 в 09:51)
 

А можно по подробнее как через сессию, и какие ещё способы есть?

   
 
 автор: Trianon   (18.07.2006 в 11:04)   письмо автору
 
   для: Pipish   (18.07.2006 в 10:00)
 

<?php //testimage1.php
   
session_start();
?><html> Enter text:
 <img src="testimage2.php?id=<?= md5(microtime()) ?>">
 <form method=post action=testimage3.php>
 <input name=check> <input type=submit value=check! >
</form>


<?php //testimage2.php
   
session_start();
   
$_SESSION['testimage']=$s=md5(microtime().session_id().$_SERVER['REMOTE_ADDR']);
   
$str strtoupper(base64_encode(pack('h12'$s)));

$width 160;
$height =100;
$ang 30;
$img_type "gif";
$font_name="comic.ttf";
$font_size=20;

$image imagecreatetruecolor($width$height);
$foncolor=imagecolorallocate($image107120237);
imagefill($image,0,0,$foncolor);

$white imagecolorallocate($image255255255);
$bnd imagettfbbox($font_size$ang$font_name$str);
$w $bnd[4] - $bnd[0];
$h $bnd[5] - $bnd[1];
$x = ($width-$w)>>1;
$y = ($height-$h)>>1;
imagettftext($image$font_size$ang$x $y$white$font_name$str);

header ("Content-type: image/".$img_type);
imagegif($image);
?>


<?php //testimage3.php
   
session_start();
   
$check = @$_POST[check];
   
$s = @$_SESSION['testimage'];
   if(
strlen($s) == 32 &&
      
strtoupper($check) == strtoupper(base64_encode(pack('h12'$s))))
      echo 
'Test passed!';
   else
      echo 
'Test failed!';
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования