Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вывод картинки и текста на странице

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Как вывести сгенерированную картинку и текст?
Jerry
Отправлено: 02 Июня, 2010 - 13:47:32
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Всем доброго дня, практически только начал изучать PHP. Восзникла небольшая проблема, и никак не получается найти поиском сколь либо полезную информацию...

вопрос собственно вот в чем: как можно 1 скриптом вывести на страницу текст и сгенерированную картинку... пишу разные content-type, но либо картинка не выводится либо текст... Недовольство, огорчение((((

и если вас не затруднит, то напишите плз. пару строк кода, как это делается...
 
 Top
Мелкий Супермодератор
Отправлено: 02 Июня, 2010 - 14:15:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




if (isset($_GET['дай_картинку'])) {
//вывод картинки с заголовком картинки
die();
}
//вывод страницы, содержащий ссылку на картинку: <img src="этот_скрипт?дай_картинку">

либо, говорят, что вот так их можно скармливать: http://habrahabr[dot]ru/blogs/webdev/95192/


-----
PostgreSQL DBA
 
 Top
Jerry
Отправлено: 02 Июня, 2010 - 14:54:57
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




большое спасибо за ответ! очень здорово, что форум живой, и достаточно быстро может кто-то помочь новичкам с возникающими вопросами.

получается, генерацию для каждой картинки всегда нужно выносить в отдельный скрипт? И чтобы не плодить файлы, вот так в одном скрипте невозможно сделать?

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2.  
  3.  
  4. echo "текст";
  5.  
  6. $im=imagecreate(100,100);
  7. imagecolorallocate($im,255,0,0);
  8. header("Content-type: image/jpeg");
  9. imagejpeg($im,'',100);
  10.  
  11. ?>


только так можно? -

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. echo "текст";
  3. echo "<img src=\"makeimg.php\">";
  4. ?>
 
 Top
Мелкий Супермодератор
Отправлено: 02 Июня, 2010 - 15:40:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Вызывать всё равно надо отдельным запросом от клиента, а чтобы не плодить файлы - можно передавать гетом скрипту указание, что ему нужно сейчас выводить - саму страницу или картинку.

например, в рабочем варианте:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if (isset($_GET['img1'])) {
  3. $im=imagecreate(100,100);
  4. imagecolorallocate($im,255,0,0);
  5. header("Content-type: image/jpeg");
  6. imagejpeg($im,'',100);
  7. die();
  8. }
  9. ?>
  10. текст страницы<br><img src="<?PHP echo $_SERVER['PHP_SELF']?>?img1">
  11.  


-----
PostgreSQL DBA
 
 Top
Jerry
Отправлено: 02 Июня, 2010 - 16:09:14
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




ещё раз спасибо, вроде понятно всё стало Улыбка
 
 Top
JustUserR
Отправлено: 03 Июня, 2010 - 17:52:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Jerry пишет:
Получается, генерацию для каждой картинки всегда нужно выносить в отдельный скрипт?
Можно делать и в одном PHP-скрипте с разбивкой по условию для вывода картинки и текста соответственно - а если у вас PHP-скрипт огранизован таким образом что к моменту вывода картинки он уже выводит некоторый текст и это достаточно сложно убрать - то можете использовать буферазицию ob_start с вырезанием лишних выведенных данных


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
qnx
Отправлено: 17 Августа, 2010 - 17:02:45
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2010  
Откуда: город-герой Киев


Помог: 0 раз(а)




с открытием скрипта генерации картинки php файлом понятно, но я хочу реализовать генерацию Captcha, точнее реализовал ее, и не знаю как окромя передачи в параметре строки, которую хочу передать это сделать, или возможно как-то вернуть из скрипта, который генерит картинку... если передать гет запросом строку, которую генерирую для отображения она в браузере у пользователя тоже будет видна(
 
 Top
JustUserR
Отправлено: 17 Августа, 2010 - 21:48:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




qnx пишет:
Если передать гет запросом строку, которую генерирую для отображения она в браузере у пользователя тоже будет видна
Для передачи уникального сгенерированного значение на капче в проверяющий его PHP-скрипт - можно использовать различные методы и обычно для этой цели используется механизм сессий на серверной сторое В принципе возможно осуществить передачу информации и на клиентской стороне с помощью JS-скрипта и системы шифрования - ведь в таком случае хотя и будет существовать вероятость расшифровки за счет автоматизированного выполнения JS-скрипта на виртуальной машине - но на практике наличие динамических JS-скриптом обеспечивает хорошую защиту


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
qnx
Отправлено: 18 Августа, 2010 - 09:16:19
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2010  
Откуда: город-герой Киев


Помог: 0 раз(а)




Я сессиями и думаю передавать, только как передать в сессию правильное значение, которое было указано на картинке? Чтоб пользователь этого не увидел. (на данный момент реализация такова, что строка генерируется в самом скрипте)
(Добавление)
index.php
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2.         session_start();
  3.  
  4.         $string_len_real = rand(3, 5);
  5.         $out_string_array = Array();
  6.         $max_high_value = 0;
  7.         $waigh_value = 2;
  8.         $end_string = '';
  9.         for ($i = 0; $i < $string_len_real; ++$i)
  10.         {
  11.                 $out_string_array[$i] = Array();
  12.                 $out_string_array[$i]['leter'] = dechex(rand(0, 15));
  13.                 $out_string_array[$i]['h_space'] = rand(1, 10);
  14.                 $out_string_array[$i]['w_space'] = rand(1, 20);
  15.                 $max_high_value = ($out_string_array[$i]['h_space'] > $max_high_value) ? $out_string_array[$i]['h_space'] : $max_high_value;
  16.                 $waigh_value = $waigh_value + imageFontWidth(2) + $out_string_array[$i]['w_space'];
  17.                 $end_string .= $out_string_array[$i]['leter'];
  18.         }
  19.  
  20.         $max_high_value = $max_high_value + 2 + imageFontHeight(2);
  21.         //echo $end_string;
  22.         $_SESSION['random_string'] = Array();
  23.         $_SESSION['random_string']['string_len_real'] = $string_len_real;
  24.         $_SESSION['random_string']['out_string_array'] = $out_string_array;
  25.         $_SESSION['random_string']['waigh_value'] = $waigh_value;
  26.         $_SESSION['random_string']['max_high_value'] = $max_high_value;
  27.        
  28.         echo "<img src=\"pic.php\"></img>";
  29.         echo "<br>";
  30.         echo $end_string;
  31. ?>

pic.php
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2.         //global $_SESSION['random_string'];
  3.         $image = imageCreate($_SESSION['random_string']['waigh_value'], $_SESSION['random_string']['max_high_value']);
  4.         $rand_color1 = array(rand(0, 1), rand(0, 1), rand(0, 1));
  5.         $color = imageColorAllocate($image, $rand_color1[0] * 255, $rand_color1[1] * 255, $rand_color1[2] * 255);
  6.         $color1 = imageColorAllocate($image, (($rand_color1[0] == 1 ? 0 : 1) * 255), (($rand_color1[1] == 1 ? 0 : 1) * 255), (($rand_color1[2] == 1 ? 0 : 1) * 255));
  7.         $x = 2;
  8.         //var_dump($_SESSION['random_string']);
  9.         for ($i = 0; $i < $_SESSION['random_string']['string_len_real']; ++$i)
  10.         {
  11.                 imageString($image, 2, $x, $_SESSION['random_string']['out_string_array'][$i]['h_space'], $_SESSION['random_string']['out_string_array'][$i]['leter'], $color1);
  12.                 $x += ($_SESSION['random_string']['out_string_array'][$i]['w_space'] + imageFontWidth(2));
  13.         }
  14.         Header("Content-type: image/png");
  15.         imagePng($image);
  16. ?>

Спасибо большое вроде разобрался, только вот не пойму почему не загружается сама картинка из php файла, генериующего ее.
п.с. если скрепить эти два файла в один и убрать вывод ехом и вардампом картинка нормально генерируется.
 
 Top
JustUserR
Отправлено: 18 Августа, 2010 - 21:24:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




qnx пишет:
Если скрепить эти два файла в один и убрать вывод ехом и вардампом картинка нормально генерируется
Судя по приведенными вами PHP-скриптам которые занимаются генерацией и сохранением уникального числа для ввода - а также создания картики для пользовательской стороны - то проблема может заключаться в том что данные PHP-скрипты не имеют общей сессионной информации для взаимодействия - по той причине что в файле pic.php вы не инициализируете текущий сеанс с помощью функций session_start


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
qnx
Отправлено: 19 Августа, 2010 - 09:08:15
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2010  
Откуда: город-герой Киев


Помог: 0 раз(а)




JustUserR спасибо огромное. добавил функцию и все заработало.
вот так примерно выглядят мои сгенерированные картинки
 
 Top
JustUserR
Отправлено: 19 Августа, 2010 - 20:02:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




qnx пишет:
JustUserR спасибо огромное. добавил функцию и все заработало.
вот так примерно выглядят мои сгенерированные картинки
Пожалуйста! Используемая вами система генераций изображений капчи для последущего их ввода пользователем явлется конечно действенной - однако можно добавить несколько дополнительных элементов на картинки для усложнения их автоматического распознавания - такие как прямые линии в случайном направлении и произвольной длины и другие шумы


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
qnx
Отправлено: 20 Августа, 2010 - 12:31:55
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Авг. 2010  
Откуда: город-герой Киев


Помог: 0 раз(а)




я об этом тоже думал. спасибо большое. капчу просто делал для себя попробовать).
думаю уже как бы сделать расшифровалку, которая бы читала битовую маску картинки, сравнивала с образцом и рисовала буквы)).. но это так, если вдохновлюсь) пока нет шумов такое думаю осуществимо.....
 
 Top
JustUserR
Отправлено: 20 Августа, 2010 - 20:11:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




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


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
ratz
Отправлено: 23 Июля, 2013 - 15:15:26
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Можно вот так попробовать, скрипт делает из введенного в поле текста картинку:
<?php
/* -------------------------------- ------- делает из текста картинку -------------- */
if (isset($_POST["send"]))
{
$text= $_POST["text"];
$im = imageCreateTrueColor(300, 100);
$c = ImageColorAllocate($im, 255 , 255, 255);
imageFilledRectangle($im, 0, 0, imageSX($im), imageSY($im), $c); // заливаем все белым цветом
$black = ImageColorAllocate($im, 0 , 0, 0);
$text=iconv("CP1251","UTF-8",$text);
imageTtfText($im, 15, 0, 50, 30, $black, "Tahoma.ttf", $text);
//header("Content-type:image/png");
imagePng($im, "1.png"); // сохраняем изображение
imageDestroy($im);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Добавить текст</title>
</head>
<body>
<form name="myform" action="index.php" method="post">
<div>
<p>Введите текст
<input type="text" name="text" /></p>
<input type="submit" name="send" value="Отправить" />
</div>
<?php
echo "<img src=\"1.png\">"; //выводим изображение
?>
</body>
</html>
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB