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

Форум PHP

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

 

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

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

тема: Вывод динамической графики (PHP) совместно с текстом
 
 автор: alex123434   (08.02.2008 в 20:32)   письмо автору
 
 

Народ обьясните в чем дело, если вывожу рисунок в браузер с помощью PHP - все нормально, но если еще и текст - то вместо рисунка получаются крякозябры как будто открыли блакнотом. Что я делаю не так? Если можно пример скрипта плиз!

   
 
 автор: dimonich2004   (08.02.2008 в 20:34)   письмо автору
 
   для: alex123434   (08.02.2008 в 20:32)
 


КоД в студию

   
 
 автор: alex123434   (08.02.2008 в 21:04)   письмо автору
 
   для: dimonich2004   (08.02.2008 в 20:34)
 

// Получаем строку, которую нам передали в параметрах
$string="Привет";
// Загружаем рисунок фона с диска
$im = imageCreateFromPng ("1.png") ;
// Создаем в палитре новый цвет — оранжевый
$orange = imageColorAllocate ($im, 10, 200, 40);
// Вычисляем размеры текста, который будет выведен
$рх = (imageSx($im)-8.7*strlen($string) ) /2;
// Выводим строку поверх того, что было в загруженном изображении
imageString ($im, 11, $рх, 2, $string, $orange) ;
// Сообщаем о том, что далее следует рисунок PNG
Header ( "Content-type : image/png" ) ;
// Теперь — самое главное: отправляем данные картинки в
// стандартный выходной поток, т. е. в браузер
imagePng ($im) ;

// В конце освобождаем память , занятую картинкой
imageDestroy ($im) ;
echo "Привет";

   
 
 автор: Staglu   (08.02.2008 в 21:08)   письмо автору
 
   для: alex123434   (08.02.2008 в 21:04)
 

Попробуйте так:
// Получаем строку, которую нам передали в параметрах
$string="Привет";
// Загружаем рисунок фона с диска
$im = imageCreateFromPng ("1.png") ;
// Создаем в палитре новый цвет — оранжевый
$orange = imageColorAllocate ($im, 10, 200, 40);
// Вычисляем размеры текста, который будет выведен
$рх = (imageSx($im)-8.7*strlen($string) ) /2;
// Выводим строку поверх того, что было в загруженном изображении
imageString ($im, 11, $рх, 2, $string, $orange) ;
// Сообщаем о том, что далее следует рисунок PNG
Header ( "Content-type : image/png" ) ;
// Теперь — самое главное: отправляем данные картинки в
// стандартный выходной поток, т. е. в браузер
imagePng ($im) ;

// В конце освобождаем память , занятую картинкой
imageDestroy ($im) ;
Header ( "Content-type : text/html" ) ;
echo "Привет";

   
 
 автор: Unkind   (08.02.2008 в 21:10)   письмо автору
 
   для: Staglu   (08.02.2008 в 21:08)
 

Staglu, сначала документ image/png, а затем text/html? Ну-ну.

   
 
 автор: Staglu   (08.02.2008 в 21:11)   письмо автору
 
   для: Unkind   (08.02.2008 в 21:10)
 

Пардон...

   
 
 автор: alex123434   (08.02.2008 в 21:19)   письмо автору
 
   для: Staglu   (08.02.2008 в 21:08)
 

Да рисунок стал выводиться не ввиде кряков, но текста нет?

   
 
 автор: Staglu   (08.02.2008 в 21:24)   письмо автору
 
   для: alex123434   (08.02.2008 в 21:19)
 

Пардон я тут написал не подумав, текста и не будет!

   
 
 автор: Staglu   (08.02.2008 в 20:54)   письмо автору
 
   для: alex123434   (08.02.2008 в 20:32)
 

Скорей всего перед отправкой рисунка вы отпровляете заголовок наверное типо такого:

<?php
header
(\"Content-type: \".image_type_to_mime_type(IMAGETYPE_PNG));
 imagepng(
$img);
?>

Если вы до отправки заголовка выведети текст (пример):

<?php
echo 'Привет МИР!!!';
header(\"Content-type: \".image_type_to_mime_type(IMAGETYPE_PNG));
 imagepng(
$img);
?>

То у вас получиться кракозябры.

Вообще опишите поточнее, какая у Вас картинка выводиться, создоется у вас она средствами PHP и.т.д, а то не очень понятно!

   
 
 автор: alex123434   (08.02.2008 в 21:15)   письмо автору
 
   для: Staglu   (08.02.2008 в 20:54)
 

К примеру: у меня идет форма для регистрации за ней должен идти рисунок с кодом для подтверждения регистрации. Я сделал так написал код формы, а потом на php с помощью генератора случайных чисел и кода который привел выше пытаюсь вывести рисунок с кодом, но как говорил одни крякозябры. Привидите мне пример плиз, как это можно реализовать!(Я не волшебник, я только учусь)

   
 
 автор: Staglu   (08.02.2008 в 21:23)   письмо автору
 
   для: alex123434   (08.02.2008 в 21:15)
 

Просто можно отдельно PHP-скрипт создать, который генерирует картинку к примеру capcha.php значение которое наноситься на картинку сохранить в сессию, затем просто в форму с регистрацией добавить тег <img src=\"captcha.php\">. Вот пример:

captcha.php

session_start();

$image_x = \"100\";
$image_y = \"30\";
$shum = \"4\";
$min_fon_size = \"20\";
$ugol_max = \"30\";
$text_len = \"4\";
$line_len = \"20\";
$pat_font = \"../font/verdana.ttf\";

//Создаем изоброжение
$img = imagecreatetruecolor($image_x , $image_y);
//Установливаем цвет фона
$fon = imagecolorallocate($img, 255,255,255);
//Заливаем картинку цветом
imagefill($img, 0, 0, $fon);

for($i=0; $i < $text_len; $i++)
{
  srand((float) microtime()*1000000);
  $text = rand(0,9);
  $num = $num.$text;

  $ugol = rand(360 - $ugol_max,360 + $ugol_max);
  $size = rand($min_fon_size, $image_y/2);
  $color_rand[$i] = imagecolorallocate($img, rand(0,250),rand(0,250),rand(0,250));

  $y = rand(($image_y-$size)/4+$size, ($image_y-$size)/2+$size);
  $x = rand(($image_x/$text_len-$size)/2, $image_x/$text_len-$size)+$i*$image_x/$text_len;

  imagettftext($img, $size, $ugol, $x, $y, $color_rand[$i], $pat_font, $text);

}


for($i = 0; $i < round($image_x*$image_y*$shum/100)/2; $i++)
{
  srand((float) microtime()*1000000);
  $color = rand(0,count($color_rand));
  imagesetpixel($img,rand(0, $image_x), rand(0, $image_y), $color_rand[$color]);
  imagesetpixel($img,rand(0, $image_x), rand(0, $image_y), $fon);
}


for($i = 0; $i < round($line_len/2); $i++)
{
  srand((float) microtime()*1000000);
  $color = rand(0,count($color_rand));

  if(rand(0,1) == 1)
  {
   imageline($img,rand(0,$image_x),rand(0,$image_y),rand(0,$image_x),rand(0,$image_y),$color_rand[$color]);
   imagedashedline($img,rand(0,$image_x),rand(0,$image_y),rand(0,$image_x),rand(0,$image_y), $fon);
  }
  else
  {
   imageline($img,rand(0,$image_x),rand(0,$image_y),rand(0,$image_x),rand(0,$image_y),$fon);
   imagedashedline($img,rand(0,$image_x),rand(0,$image_y),rand(0,$image_x),rand(0,$image_y), $color_rand[$color]);
  }

}
$_SESSION[\"captcha\"] = $num;

if($img)
{
 header(\"Content-type: \".image_type_to_mime_type(IMAGETYPE_PNG));
 imagepng($img);
}


и вот форма:


<table width=100% border=0>
   <tr>
    <td colspan=2><font size=5 color=66666><b>Авторизация</b></font></td>
   </tr>

   <tr>
     <td colspan=2><hr></td>
   </tr>

   <tr>
     <td><font size=2 color=66666><b>Логин</b></font></td>
     <td><input size=\"25\" name=\"login\" type=\"text\" value=\"\"></td>
   </tr>

   <tr>
     <td><font size=2 color=66666><b>Пароль</b></font></td>
     <td><input size=\"25\" name=\"pasword\" type=\"text\" value=\"\"></td>
   </tr>

   <tr>
     <td colspan=2><br /></td>
   </tr>

   <tr>
     <td>
      <font size=2 color=66666><b>Введите число:</b></font><br />
     <img src=\"captcha.php\" border=\"1\">
     </td>
     <td><br /><input size=5 name=\"captcha\" type=\"text\" value=\"\"></td>
   </tr>

   <tr>
     <td colspan=2 align=right><input type=\"submit\" value=\"Войти\"></td>
   </tr>
 </table>


Выше я представил код авторизации (не регистрации), но я думаю Вы поняли.

Надеюся в этот раз Я бред не написал!!

   
 
 автор: alex123434   (08.02.2008 в 21:31)   письмо автору
 
   для: Staglu   (08.02.2008 в 21:23)
 

Все, спасибо! Толко <img src=\"captcha.php\" border=\"1\"> этоже не PHP косые черты не надо. Но это принимаю как опечатку. Еще обошолся без ссесий на основе приведенного мною выше скрипта. Огромное спасибо все работает.

   
Rambler's Top100
вверх

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