Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Текст на картинку


Автор: gta4kv 3.4.2007, 19:53
Помогите пожалуйста,

сегодня столкнулся с такой ошибкой,

пытался наложить текст на картинку,

как не бился, не получилось,

сначала были каракули, потом "& # 1105; & #1096  etc"

Код:

Код

<?php
ob_start(); 
function iso2uni ($iso){
    $uni="";
    for ($i=0; $i < strlen($iso); $i++){
        $thischar=substr($iso,$i,1);
        $charcode=ord($thischar);
        $uni.=($charcode>175)?"&#".(1040+($charcode-176)).";":$thischar;
    }
    return $uni;
}  
$text = iso2uni(convert_cyr_string($text, "w", "i"));

$im = imageCreateFromGif("button.gif");

$color = imageColorAllocate($im, 0, 0, 0);

$px = (imageSX($im)-6.5*strlen($text))/2;

imageString($im, 3, $px, 1, $text, $color);

Header("Content-type: image/png");

imagePng($im);
    
imageDestroy($im);
ob_end_flush();
?>



 smile

Добавлено через 1 минуту и 19 секунд
Заранее благодарен опять же)

Автор: mishaSL 4.4.2007, 09:03
Цитата(gta4kv @  3.4.2007,  19:53 Найти цитируемый пост)
сначала были каракули, потом "& # 1105; & #1096  etc"


Для того чтобы русский текст на картинке отображался нормально, необходимо его писать в кодировке utf-8, для этого можете преобразовывать кодировку с помощью функции http://php.net/iconv

Автор: mishaSL 4.4.2007, 18:29
Цитата(gta4kv @  4.4.2007,  18:04 Найти цитируемый пост)
Не могу найти сам модуль..

Какой модуль?

Добавлено через 3 минуты и 28 секунд
Цитата(gta4kv @  4.4.2007,  16:01 Найти цитируемый пост)
Можно пример использования? )

Код

$text = 'текст текст';//это текст в cp1251
$im = imageCreateFromGif("button.gif");
$color = imageColorAllocate($im, 0, 0, 0);
$px = (imageSX($im)-6.5*strlen($text))/2;
$text = iconv("windows-1251","UTF-8", $text); // преобразовываем в utf-8
imageString($im, 3, $px, 1, $text, $color);
Header("Content-type: image/png");
imagePng($im);
    
imageDestroy($im);

Автор: gta4kv 7.4.2007, 12:50
Код
<?php
ob_start(); 
$text = 'текст текст';//это текст в cp1251
$im = imageCreateFromGif("button.gif");
$color = imageColorAllocate($im, 0, 0, 0);
$px = (imageSX($im)-6.5*strlen($text))/2;
$text = iconv("windows-1251","UTF-8", $text); // преобразовываем в utf-8
imageString($im, 3, $px, 1, $text, $color);
Header("Content-type: image/png");
imagePng($im);
    
imageDestroy($im);
ob_end_flush();
?>


Так не пашет.. Закарюки тоже

Автор: mishaSL 11.4.2007, 21:01
Отключи кеширование, т.е. убери функции ob_
Ошибки какие-нибудь выдает (уровень ошибок поставь error_reporting(E_ALL ^ E_NOTICE);)?

Автор: mishaSL 12.4.2007, 17:46
Цитата(gta4kv @  12.4.2007,  16:00 Найти цитируемый пост)
Нефига.
Не пашет.

Напиши что за ошибки. Если их нет, то что выводит? Файл(в котором PHP код) в какой кодировке сохранен?

Автор: mishaSL 12.4.2007, 18:54
gta4kv, воспользуйтесь TTF шрифтами imagettftext() точно должно сработать.

Автор: gta4kv 12.4.2007, 19:00
Будешь смеяться, не умею им пользоваться.
А тем паче рассчитывать координаты.
 smile 

Автор: mishaSL 12.4.2007, 19:38
Цитата(gta4kv @  12.4.2007,  19:00 Найти цитируемый пост)
Будешь смеяться, не умею им пользоваться.

Вот накидал пример:
Код

<?php
header("Content-type: image/png");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

$text = 'текст текст';
$text = iconv("windows-1251","UTF-8",$text); // приводим текст в utf-8
$src_img = imagecreatefromgif('./test.gif'); // грузим картинку, если jpeg, то imagecreatefromjpeg() и т.д.
$color = imagecolorallocate ($src_img, 0, 0, 0);
$font = "./tahomabd.ttf"; // определяем каким шрифтом рисуем, сам файл шрифта ложим туда же где и скрипт
$size = imagettfbbox(14, 0, $font, $text); //возвратит размеры нужной нам строки - http://ru2.php.net/imagettfbbox
$height = $size[1]-$size[7]; // узнали высоту, анагогично можно узнать ширину
imagettftext($src_img, 14, 0, 25, $height+20, $color, $font, $text); //написали все что надо
imagepng($src_img);//вывели в браузер, пусть в PNG или можно в чем угодно
imagedestroy($src_img);
?>

Проверил работает.
Если что непонятно спрашивай. Главное шрифт бери TTF и чтобы он кирилицу поддерживал. Посмотреть шрифты на WINDOWS можно в C:\WINDOWS\Fonts

Автор: gta4kv 12.4.2007, 19:43
Тока одно изменение:
Код

imagettftext($src_img, 14, 0, 25, $height+2 /*а не 20*/, $color, $font, $text); //написали все что надо


А то у меня вся картнка 150х20  smile 


Автор: PARROT 12.4.2007, 20:01

 ! 
PARROT
Уважаемый gta4kv, весь Ваш флейм, как и скрытай мат, как и "нафиги" Ваши я буду нещадно удалять, у нас тут не подворотня! При написании постов на нашем форуме, пользуйтесь чистым русским языком, пожалуйста. За следующий раз буду наказывать кирпичами. Спасибо!
PS: Тут почитайте правила: http://forum.vingrad.ru/s/7e9242369ab0b951...ct-SR/f-27.html  
Флеймим мы в другом разделе.
Накручивание счетчиков в виде бессмысленных постов, тоже не приветствуется   :rtfm


Добавлено через 6 минут и 25 секунд
Тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)