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

Форум PHP

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

 

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

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

тема: Вывод текста в картинку
 
 автор: Petter   (25.12.2010 в 02:01)   письмо автору
 
 

<?php
header 
("Content-type: image/gif");
$im imagecreate (400100);
$black imagecolorallocate ($im000);
$white imagecolorallocate ($im255255255);
imagettftext ($im2001020$white"chonker.ttf""TEXT TEXT TEXT");
imagegif ($im);
imagedestroy ($im);
?>


Не могу понять, где ошибка, но картинки нет

  Ответить  
 
 автор: Trianon   (25.12.2010 в 02:29)   письмо автору
 
   для: Petter   (25.12.2010 в 02:01)
 

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

  Ответить  
 
 автор: Petter   (25.12.2010 в 02:33)   письмо автору
 
   для: Trianon   (25.12.2010 в 02:29)
 

Warning: imagettftext() [function.imagettftext]: Could not find/open font in /дальше пишет путь к файлу на сервере/ on line 6

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

Написал иначе:

<?php
$im 
imagecreate (400100);
$black imagecolorallocate ($im000);
$white imagecolorallocate ($im255255255);
$real_path realpath("chonker.ttf");
imagettftext ($im2001020$white$real_path"TEXT TEXT TEXT");
imagegif ($im);
imagedestroy ($im);
?>


И снова та же ошибка.

  Ответить  
 
 автор: Trianon   (25.12.2010 в 02:55)   письмо автору
 
   для: Petter   (25.12.2010 в 02:33)
 

что в переменной $real_path ?

  Ответить  
 
 автор: Petter   (25.12.2010 в 03:02)   письмо автору
 
   для: Trianon   (25.12.2010 в 02:55)
 

там путь к файлу
вида: /usr/home/.../public_html ( это папка сервера, куда грузятся файлы ) /chonker.ttf

решил проверить "пример" из PHP.net
http://ru.php.net/manual/en/function.imagettftext.php


<?php

// Set the content-type


// Create the image
$im imagecreatetruecolor(35030);

// Create some colors
$white imagecolorallocate($im000);
$grey imagecolorallocate($im128128128);
$black imagecolorallocate($im255255255);
imagefilledrectangle($im0039929$white);

// The text to draw
$text 'Welcome!';
// Replace path by your own font path
$font 'chonker.ttf';

// Add some shadow to the text
imagettftext($im2001121$grey$font$text);

// Add the text
imagettftext($im2001020$black$font$text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>


и та же самая ошибка - не может открыть найти и открыть font

  Ответить  
 
 автор: Trianon   (25.12.2010 в 04:36)   письмо автору
 
   для: Petter   (25.12.2010 в 03:02)
 

так а файл-то есть на этом месте?
И он имеет ровно такое имя, учитывая строчные и прописные символы?

  Ответить  
 
 автор: Petter   (25.12.2010 в 10:12)   письмо автору
 
   для: Trianon   (25.12.2010 в 04:36)
 

Во втором примере получилось!
Но только если буквы латинские...
а вот если кириллица - не выводит

  Ответить  
 
 автор: Valick   (25.12.2010 в 11:21)   письмо автору
 
   для: Petter   (25.12.2010 в 10:12)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=30773
__
еще

  Ответить  
 
 автор: Petter   (25.12.2010 в 11:39)   письмо автору
 
   для: Valick   (25.12.2010 в 11:21)
 

Спасибо, Vallick, а сами-то вы проверяли этот код?
Я проверил, всё отлично, а русский текст - как не отображался, так и не отображается.
Пишу я в Блокноте, и файл мой (.php) уже в UTF-8, и в .htaccess charset="UTF-8".

Интересно, а как всё-таки перекодировать русский текст в символы Юникода, чтобы он отобразился?

  Ответить  
 
 автор: Valick   (25.12.2010 в 11:42)   письмо автору
 
   для: Petter   (25.12.2010 в 11:39)
 

Спасибо, Vallick, а сами-то вы проверяли этот код?
угу, код перевода взят из книги Д. Котерова
__
chonker.ttf положите в папку со скриптом

  Ответить  
 
 автор: Petter   (25.12.2010 в 11:56)   письмо автору
 
   для: Valick   (25.12.2010 в 11:42)
 

Конечно, файл chonker.ttf лежит там, где нужно.
Конечно, в нём есть кирилличный шрифт.
Однако, указанный пример из книги не применим, в нём ошибки.

  Ответить  
 
 автор: Valick   (25.12.2010 в 12:02)   письмо автору
 
   для: Petter   (25.12.2010 в 11:56)
 

вы по второй ссылке ходили? там месяца три читать можно, информации выше крыши
и если у всех кроме Вас работает, то может все таки "лыжи не едут"? ;)

  Ответить  
 
 автор: sim5   (25.12.2010 в 12:56)   письмо автору
3.1 Кб
 
   для: Petter   (25.12.2010 в 11:56)
 

>Однако, указанный пример из книги не применим, в нём ошибки.
<?
$im 
imagecreatetruecolor(35036);
$white imagecolorallocate($im000); 
$grey imagecolorallocate($im128128128); 
$black imagecolorallocate($im255255255); 
imagefilledrectangle($im0039929$white); 

$text 'Вы не правы!'
$font 'aktau.ttf'
imagettftext($im2001134$greyiconv('windows-1251','utf-8',$font), $text); 
imagettftext($im2001033$blackiconv('windows-1251','utf-8',$font), $text); 
header('Content-Type: image/png'); 
imagepng($im); 
imagedestroy($im);

PS. iconv только потому, что выполнялось все из под 1251, для вас это не имеет значения.

  Ответить  
 
 автор: Petter   (25.12.2010 в 13:21)   письмо автору
2.4 Кб
 
   для: sim5   (25.12.2010 в 12:56)
 

... и отображается только восклицательный знак на чёрном фоне...
Вообще, насколько я понимаю, перекодироваться должен текст, а не font,
но даже если так :

<?php
$im 
imagecreatetruecolor(35036); 
$white imagecolorallocate($im000);  
$grey imagecolorallocate($im128128128);  
$black imagecolorallocate($im255255255);  
imagefilledrectangle($im0039929$white);  

$text 'TEXT: Вы не правы!';  
$font 'chonker.ttf';  
imagettftext($im2001134$grey$fonticonv("windows-1251""UTF-8""$text"));
imagettftext($im2001033$black$fonticonv("windows-1251""UTF-8""$text"));
header('Content-Type: image/png');
imagepng($im);  
imagedestroy($im);


И виден только TEXT: белым по чёрному фону

А почему мне надо перекодировать русский текст, если файл уже в UTF-8?
Как всё-таки отобразить русский текст? Ведь, латинский-то, без проблем отображается.

  Ответить  
 
 автор: sim5   (25.12.2010 в 13:51)   письмо автору
 
   для: Petter   (25.12.2010 в 13:21)
 

Привально понимаете, просто при копировании допустил ошибку. Ничего вам не надо конвертировать, это у меня среда 1251, а данной функции требуется именно utf.
Вы картинку видели? Если нет русского, то хотя бы проверьте шрифт свой, если ли в нем такая кодовая страница.

  Ответить  
 
 автор: Petter   (25.12.2010 в 14:02)   письмо автору
 
   для: sim5   (25.12.2010 в 13:51)
 

Конечно, я картинку видел,
и, думаю, что видимо настройки серверов у нас разные, и попробую обратиться туда...
Шрифтовый файл в порядке, в нём кириллица есть.

  Ответить  
 
 автор: Trianon   (25.12.2010 в 14:03)   письмо автору
 
   для: Petter   (25.12.2010 в 14:02)
 

Шрифт arial.ttf из набора windows/fonts пробовали применить?
Шрифты шрифтам рознь.

  Ответить  
 
 автор: Petter   (25.12.2010 в 14:13)   письмо автору
 
   для: Trianon   (25.12.2010 в 14:03)
 

попробую
а надо только .ttf?
У меня в Windows только Open Type

  Ответить  
 
 автор: sim5   (25.12.2010 в 14:33)   письмо автору
 
   для: Petter   (25.12.2010 в 14:13)
 

Здрастье, приехали:
imagettftext - записывает текст на изображение с использованием шрифтов TrueType.
Да и само название функции говорит об этом.

  Ответить  
 
 автор: Petter   (25.12.2010 в 14:43)   письмо автору
3 Кб
 
   для: sim5   (25.12.2010 в 14:33)
 

Да, попробовал с другим шрифтом
только квадратики вместо русских букв, на картинке видно.
И шрифт arial.ttf утащил из своего компьютера, по Вашему совету, для проверки, загрузил на сервер, и всё тоже самое, шрифт теперь arial, и только латынь и квадратики; то есть, проблема заключается не в шрифтовом файле, а в работе функции imagettftext().

// Set the content-type
header('Content-type: image/png');

// Create the image
$im = imagecreatetruecolor(350, 30);

// Create some colors
$white = imagecolorallocate($im, 0, 0, 0);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 255, 255, 255);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Welcome! Привет!';
// Replace path by your own font path
$font = 'arial.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

  Ответить  
 
 автор: sim5   (25.12.2010 в 15:23)   письмо автору
 
   для: Petter   (25.12.2010 в 14:43)
 

Нет никаких проблем в функции, это у вас проблемы с предоставлением тескта.

  Ответить  
 
 автор: Petter   (25.12.2010 в 16:01)   письмо автору
3.9 Кб
 
   для: sim5   (25.12.2010 в 15:23)
 

sim5, Вы абсолютно правы.

Когда я записал русский текст Юникодом, просто, тупо, набив вручную, то всё получилось, и на картинке видно.


$text = 'Welcome! &#1055;&#1056;&#1048;&#1042;&#1045;&#1058;!';


А какая функция PHP может превратить кириллицу, да, собственно, и латиницу, тоже, можно, в эти цифровые юникодные символы?
Осталось, только, её найти, и дело сделано!
Не может быть, чтобы такой функции не было, это, ведь, не только моя проблема.

  Ответить  
 
 автор: sim5   (25.12.2010 в 16:21)   письмо автору
 
   для: Petter   (25.12.2010 в 16:01)
 

Если ваш сервер по умолчанию это utf, ваши скрипты тоже этой кодировки, то никакого преобразования не требуется. А вот от куда у вас берется иникод?

  Ответить  
 
 автор: Petter   (25.12.2010 в 16:27)   письмо автору
 
   для: sim5   (25.12.2010 в 16:21)
 

Извините, не понял вопрос.

Есть же функция, htmlspecialchars(), которая переводит HTML-символы в цифру.
Неужели нет до сих пор функции, переводящей кириллицу и латиницу в цифру?

  Ответить  
 
 автор: sim5   (25.12.2010 в 16:41)   письмо автору
 
   для: Petter   (25.12.2010 в 16:27)
 

Ну-ка откройте мануал и почитайте чем занимается функция htmlspecialchars().
Что значит перевести кириллицу и латиницу в цифру?
О какой цифре вы речь ведете?

  Ответить  
 
 автор: Petter   (25.12.2010 в 17:26)   письмо автору
 
   для: sim5   (25.12.2010 в 16:41)
 

Странный вопрос.
У любой русской, да и не только русской, а вообще любой, хоть китайской, буквы есть цифровой эквивалент в Юникоде, и
эти-то эквиваленты я и написал в $text

$text = 'Welcome! &#1055;&#1056;&#1048;&#1042;&#1045;&#1058;!';


http://ru.wikipedia.org/wiki/BOM

  Ответить  
 
 автор: Trianon   (25.12.2010 в 17:45)   письмо автору
 
   для: Petter   (25.12.2010 в 17:26)
 

>У любой русской, да и не только русской, а вообще любой, хоть китайской, буквы есть цифровой эквивалент в Юникоде,

и эти цифровые эквивалены замечательно себе присутствуют в слегка закодированном в транспортных целях виде, в кодировке UTF-8 безо всяких специальных преобразований.
Не накручивайте лишнего.

  Ответить  
 
 автор: Petter   (25.12.2010 в 18:08)   письмо автору
 
   для: Trianon   (25.12.2010 в 17:45)
 

Хорошо, а как мне иначе добиться отображения русского текста?

Я, что-то, не уловил Ваше предложение, ведь, по Вашему, так мне и iconv() не нужна, раз у меня документ в UTF-8, но, вот, только, текст-то не отображается, если Вы картинки, конечно, смотрели.

  Ответить  
 
 автор: sim5   (25.12.2010 в 19:11)   письмо автору
 
   для: Petter   (25.12.2010 в 18:08)
 

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

  Ответить  
 
 автор: sim5   (25.12.2010 в 18:04)   письмо автору
 
   для: Petter   (25.12.2010 в 17:26)
 

У вас в голове каша. В компьютере все цифровое, нецифрового просто нет. Htmlspecialchars ничего не конвертирует ни в какую цифру, она конвертирует всего лишь некоторые симоволы в их html-представления, а не в цифру, ибо еще раз повторю - все цифра, и utf, и windows-1251, и другое.
Это вы написали то, чего у вас вообще не должно быть, если вы пишите и работаете в utf, о чем вы упоминали ранее. Вопрос, от куда у вас это взялось? Ясен теперь вопрос?

  Ответить  
 
 автор: Petter   (25.12.2010 в 18:10)   письмо автору
 
   для: sim5   (25.12.2010 в 18:04)
 

Эти символы я сам впечатал вместо русских букв, так как символы отображаются, а буквы нет.

  Ответить  
 
 автор: sim5   (25.12.2010 в 19:12)   письмо автору
 
   для: Petter   (25.12.2010 в 18:10)
 

А какого фига вы их печатаете? Выше смотрите.

  Ответить  
 
 автор: Petter   (25.12.2010 в 19:14)   письмо автору
 
   для: sim5   (25.12.2010 в 19:12)
 

Это HTML-эквиваленты русских букв, они есть "в природе", так как не у всех есть русская клавиатура.
Вы в первый раз в жизни видите эти эквиваленты?
Так же, как не у всех есть знак кавычек-ёлочек, так же, не у всех, есть и русские буквы.
Важно то, что этот способ работает реально. Единственное неудобство - приходится вводить их рукой, так как я не нашёл в PHP функцию, которая переводила бы русские буквы в их эквиваленты, которые есть в спецификации HTML, если Вам точно нужно знать, откуда я это знаю.

Когда я сделал, как Вы показывали выше,

<?php 
$im 
imagecreatetruecolor(35036);
$white imagecolorallocate($im000);
$grey imagecolorallocate($im128128128);
$black imagecolorallocate($im255255255);
imagefilledrectangle($im0039929$white);
$text 'TEXT: Вы не правы!';   
$font 'arial.ttf';   
imagettftext($im2001134$grey$font$text); 
imagettftext($im2001033$black$font$text); 
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>


То предупреждения:

Warning: imagettftext() [function.imagettftext]: any2eucjp(): invalid code in input string in /usr/home/.../.../ttf4.php on line 9

Warning: imagettftext() [function.imagettftext]: any2eucjp(): invalid code in input string in /usr/home/.../.../ttf4.php on line 10

Warning: Cannot modify header information - headers already sent by (output started at /usr/home/.../.../ttf4.php:9) in /usr/home/.../.../ttf4.php on line 11

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

  Ответить  
 
 автор: sim5   (25.12.2010 в 19:31)   письмо автору
 
   для: Petter   (25.12.2010 в 19:14)
 

Вам теории охота? Тогда сами с собою, а мне недосуг зря языком чесать.

И так, последний раз - если ваш сервер работает в utf (вы вообще уверены в этом), php-редактор, которым вы пишите код тоже сохраняет файлы в utf (это давно надо было проверить, без подсказки), то на экране, в редакторе, вы будете видеть привычное "Русский тект", а вот php обработчику уйдет такое "Р СѓСЃСЃРєРёР№ текcС‚", ибо именно так будет выгялдеть utf-8 представление предложения "Русский текст". И если вам охота вбивать ручками, а не настроить как положено редактор свой, то тогда так и пишите, а не вляпывайте html-представления, которые совсем не к месту.

То что я видел в жизни, вам еще только предстоит увидеть. Не порите херни, разберитесь со своим редактром.

  Ответить  
 
 автор: Petter   (25.12.2010 в 19:53)   письмо автору
 
   для: sim5   (25.12.2010 в 19:31)
 

Если в этом только дело...
А какой Вы посоветуете текстовый редактор, в таком случае?
Я пользовался обыкновенным Блокнотом (Notepad) из Windows, и ещё Notepad++

  Ответить  
 
 автор: sim5   (25.12.2010 в 20:00)   письмо автору
 
   для: Petter   (25.12.2010 в 19:53)
 

А я пользуюсь нормальным редактром, и не одним phpDesigner, Dreamweaver, HomeSite. Блокнот не надо, он сохранят с BOM, в нем и причина ошибки на вывод заголовка (header), так как BOM был выведен в браузер, а заголовки надо передавать до любого вывода в него.

  Ответить  
 
 автор: Trianon   (25.12.2010 в 19:51)   письмо автору
31.3 Кб
 
   для: Petter   (25.12.2010 в 19:14)
 

см картинку

  Ответить  
 
 автор: Petter   (25.12.2010 в 19:54)   письмо автору
 
   для: Trianon   (25.12.2010 в 19:51)
 

Как интересно!
Пишем одно и то же, а результат разный...
Сейчас буду разбираться с редактором...

  Ответить  
 
 автор: Petter   (26.12.2010 в 01:33)   письмо автору
 
   для: Valick   (25.12.2010 в 11:42)
 

Спасибо, Vallick, а сами-то вы проверяли этот код?
угу, код перевода взят из книги Д. Котерова


Читал я эту книгу...
Может он и великий программист, этот автор, но книга вся состоит из опечаток в листингах, практически ни один из примеров не иллюстрирует текст, как и в этом печальном случае, так и не ясно, о чём там речь, и это получилась книга ни о чём, общие рассуждения...

Гораздо интереснее, в смысле практики, было изучать php.net.

  Ответить  
 
 автор: Valick   (26.12.2010 в 08:12)   письмо автору
 
   для: Petter   (26.12.2010 в 01:33)
 

решил проверить "пример" из PHP.net
http://ru.php.net/manual/en/function.imagettftext.php
...
и та же самая ошибка - не может открыть найти и открыть font


так я смотрю у Вас все кругом виноватые

Читал я эту книгу...
скорее всего не читали, а листали (на экране компьютера)
более того смею предположить, что у Вас вообще нет ни одной "живой" книги по РНР
это собственно и является причиной того что у Вас ничего не работает
__
программировать как и танцевать нужно учиться, причины по которым можно стать плохим танцором
уже давно известны, а вот с программистами немного сложнее.
---
кстати у Вас Денвер работает или и в этот раз Котеров подсунул Вам фуфел?

  Ответить  
 
 автор: Petter   (26.12.2010 в 13:06)   письмо автору
 
   для: Valick   (26.12.2010 в 08:12)
 

Нет, я не устанавливал Apache у себя на компьютере, мне это никогда не было нужно.
Я всегда тестирую на действующих хостингах, конкретно, там, где располагается сайт, над которым я работаю, причём, на одном российском и одном иностранном, и попробую ещё на хостинге Ru-Center, может у них заработает...

Я обычный парень, Клиент, а не сотрудник Сервера, у меня обыкновенный ftp-доступ к виртуальному php-хостингу, как правило, и в моём распоряжении лишь .htaccess, если Вы имеете в виду конфигурирование.

  Ответить  
 
 автор: sim5   (26.12.2010 в 13:10)   письмо автору
 
   для: Petter   (26.12.2010 в 13:06)
 

Ни у кого не заработат пока вы не поймете, что проблема не в хостах, РНР и конкретно в этой функции, а проблема у вас.

  Ответить  
 
 автор: Petter   (27.12.2010 в 21:19)   письмо автору
117.7 Кб
 
   для: sim5   (26.12.2010 в 13:10)
 

Большое спасибо, sim5!
Действительно, проблема была у меня.
Сменил Блокнот на другой редактор - и тот же самый скрипт заработал.
Большое спасибо за дельный, добрый совет!
Кстати, очень интересный редактор.
И остальным огромное спасибо за отклики.
Теперь всё работает ( см. картинку )!

  Ответить  
Rambler's Top100
вверх

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