Консультация № 109004
12.11.2007, 08:38
0.00 руб.
0 1 1
Привет!
Вопрос: "как вывести на картинке текст в несколько строк?"
Подробнее: из базы получаем массив строк(курсы валют например) и преобразуем в переменной в строку типа "1р=0,5$
1p=0,25Y
" итд
Тоесть текстом мы прекрасно можем вывести на страницу. Даже отформатировать. Это не проблема. Забуксовал при выводе этого на картинку. Выводит и "/n" и "
" как обычный текст. А надо разбить на строки.
Дополнительно - текст в базе в UTF-8 - с этим тоже надо бороться, иначе выводит кракозябры. ПХП 5.2.2 мускул 4.
Благодарю за внимание.

Обсуждение

Неизвестный
12.11.2007, 10:49
общий
это ответ
Здравствуйте, Fyrfox!

1 функция пепеводит текст из cp1251 в UTF (поэтому храни текст в бази в cp1251:))
2 функция делает из текста массив, 1 параметром передаёшь сам текст, 2 - примерное кол-во символов(она бъёт по целым словам), т.е. в твоём случае можно смело указывать 7.

Ну и далее примерно так...
$text = "1р=0,5$ 1p=0,25Y";

$txt_array = text2array($text,30); //Бъём в массив
for($i=0;$i<count($txt_array);$i++) {
$text2 = win2uni($txt_array[$i]); //Переводим в utf
imagettftext($img, 8, 7, 16+$i*2.5, 55+15*$i, $white, "fonts/arial.ttf", $text2);
//(нужно только шрифт в папку fonts закинуть, можно из винды взять, можно использовать любой TrueType)
}

Функцию text2array($text, $width) можно соответственно модернизировать чтобы она была текст не по кол-во символов, а по разделителю... или даже воспользоваться обычным explode("
", $text);


Приложение:
function win2uni($s){ $s = convert_cyr_string($s, ‘w‘,‘i‘); for ($result=‘‘, $i=0; $i<strlen($s); $i++) { $charcode = ord($s[$i]); $result .= ($charcode>175)?"&#".(1040+($charcode-176)).";":$s[$i]; } return $result;}function text2array($text, $width){ $text = wordwrap($text, $width); return explode("\n",$text);}
Форма ответа