[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кириллица на генерируемом изображении
Grey
Здравствуйте, согласно мануалу использую функцию перевода в юникод:

PHP
<?php
function win2uni($s)
  {
    
$s convert_cyr_string($s,'w','i'); // преобразование win1251 -> iso8859-5
    // преобразование iso8859-5 -> unicode:
    
for ($result=''$i=0$i<strlen($s); $i++) {
      
$charcode ord($s[$i]);
      
$result .= ($charcode>175)?"&#".(1040+($charcode-176)).";":$s[$i];
    }
    return 
$result;
  }
Header("Content-type: image/png");
$t=$_GET['text'];
$string win2uni('Превед, ворлд!');
$imImageCreateFromJPEG("1.jpg");
$LightGreyImageColorAllocate($im250250250);
ImageString($im331$string$LightGrey);
ImagePng($im);
ImageDestroy($im);


После чего при выводе получаю буквы типа П
если вприсывать в скрипт вместо букаф вставлять шестисимвольую кодировку ее, то она выводится в том же виде.
Подскажите как решить.
Просьба ссылками в мануалы не тыкать, а ответить тех кто сам реально делал вывод русского текста.



Спустя 21 минута, 9 секунд (11.02.2009 - 06:47) kirik написал(а):
Grey, по дефолту в php нет локализованных таблиц символов. Тоесть корявки которые ты видишь - не проблемы с кодировкой, а проблема отсутствия соответствующих шрифтов.
Есть два выхода: использовать свой шрифт (функция imagettftext() при использовании ttf фонтов нужно использовать кодировку utf8; конвертится с помощью iconv()) или работать с imagestring() но подгружать свой шрифт через imageloadfont().

Спустя 4 часа, 44 минуты, 39 секунд (11.02.2009 - 11:32) sergeiss написал(а):
Вот, держи. Эта функция взята мной "на вооружение" из книги Вадима Дунаев "PHP". Хороший человек, очень хорошую книгу написал smile.gif Я тут что-то изменил, но основа из книги.

PHP
function str_rus$str )
// преобразование русских букв в строке для вывода на картинку
{
$nstr=""// итоговая строка
for( $i=0$i<strlen$str ) ;    $i++)
{
    
$symbol=substr($str$i1); // get symbol
    
$ascii=ord$symbol );    // get ascii code of this symbol
    
if( $ascii 128 )
    {    
$nstr .= $symbol;        }
    elseif( 
$ascii 191 and $ascii 256 )
    {    
$nstr .= "&#". (string)(848 ord($symbol)).';';    }
    else
    {    
$nstr .= $symbol;    }
// end of for( $i ) loop

return( $nstr );
// end of function str_rus

Спустя 1 день, 4 часа, 20 минут, 33 секунды (12.02.2009 - 15:52) Grey написал(а):
Воспользовался функциями ImageString() и imageloadfont()

Предварительно конвертировал шрифты TTF в шрифты GDF программой ttf2gdf PHP FONTS
Удобно подбирать шрифты, выдает все которые есть в системе. Можно задать ширину и высоту символов.

PHP
<?php
Header
("Content-type: image/jpeg");
$name = $_GET['name']; //получем имя юзера
$string = 'Превед,'.$name.'!'; //создаем строку
$im= ImageCreateFromJPEG("1.jpg"); //создаем фон из готовой картинки
$red= ImageColorAllocate($im, 250, 0, 0); //первый цвет
$white= ImageColorAllocate($im, 250, 250, 250); //второй цвет
$font = imageloadfont('1.gdf'); //подгружаем полученный шрифт
ImageString($im, $font, 3, 1, $string, $red); //вывод строки заднего плана, будет играть роль тени.
ImageString($im, $font, 4, 2, $string2, $white); //повторный вывод строки другого цвета со смещением. непосредственно надпись
Imagejpeg($im); //вывод
ImageDestroy($im);

Работает на ура.
Что вышло в итоге
user posted image

Спустя 2 года, 9 месяцев, 7 дней, 8 часов, 38 минут, 57 секунд (19.11.2011 - 23:31) Гость_user написал(а):
<?php
//Создаём "чистый" холст для рисования шириной 200 пикселей и высотой 300 пикселей
$i = imageCreate(200, 100);
//Делаем белый фон
$color = imageColorAllocate($i, 255, 255, 255);
//Устанавливаем красный цвет
$color = imageColorAllocate($i, 255, 0, 0);
//Рисуем горизонтальный текст
$russian_text = iconv("CP1251", "UTF-8", "Сайт MyRusakov.ru");
//Рисуем текст ttf-шрифтом
imageTtfText($i, 10, 0, 10, 50, $color, "arial.ttf", $russian_text);
//imageString($i, 5, 10, 50, "MyRusakov.ru", $color);
//Рисуем вертикальный текст
//imageStringUp($i, 5, 80, 150, "MyRusakov.ru", $color);
//Отправляем заголовок с mime-type

Header("Content-type: image/png");
//Выводим изображение
imagePng($i);
//Уничтожаем идентификатор и освобождаем ресурсы сервера
imageDestroy($i);
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.