Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не рисуются шрифты, Текст отображается не всеми шрифтами 
:(
    Опции темы
darktempler
  Дата 20.9.2011, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.6.2006

Репутация: нет
Всего: нет



Есть скрипт который рисует картинку заданным шрифтом.

Код

<?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;
  }
   
  define('WIDTH', 300);
  define('HEIGHT', 80);
  define('FONT_NAME', $_GET[font]);
  define('FONT_SIZE', 30);
  define('S_FONT_SIZE', 9);

  $image = imagecreatetruecolor(WIDTH,HEIGHT)
   or die('Cannot create image'); 
  imagefill($image, 0,0, 0xFFFFFF);
  /*for ($i=0;$i<WIDTH;$i++){
      imageline($image, $i*5, 0, $i*5, HEIGHT, 0xeeeeee); 
  }
  for ($i=0;$i<HEIGHT;$i++){
      imageline($image, 0, $i*5, WIDTH, $i*5, 0xdddddd); 
  }*/
  // Не забываем преобразовать текст в кодировку Unicode
  $text = win2uni($_GET[s]);

  $coord = imagettfbbox(
     FONT_SIZE,  // размер шрифта
     0,          // угол наклона шрифта (0 = не наклоняем)
     FONT_NAME,  // имя шрифта, а если точнее, ttf-файла
     $text       // собственно, текст
     );

  /* Функция imagettfbbox возвращает нам массив из восьми элементов,
     содержащий всевозможные координаты минимального прямоугольника,
     в который можно вписать данный текст. Индексы массива
     удобно обозначить на схеме в виде координат (x,y):

     (6,7)           (4,5)
       +---------------+
       |Всем привет! :)|
       +---------------+
     (0,1)           (2,3)

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

     По этой схеме легко вычислить ширину и высоту текста:
  */
  $width = $coord[2] - $coord[0];
  $height = $coord[1] - $coord[7];

  // Зная ширину и высоту изображения, располагаем текст по центру:

  $X = (WIDTH - $width) / 2;
  $Y = (HEIGHT + $height) / 2;

  imagettftext(
    $image,      // как всегда, идентификатор ресурса
    FONT_SIZE,   // размер шрифта
    0,           // угол наклона шрифта
    $X, $Y,      // координаты (x,y), соответствующие левому нижнему
                 // углу первого символа
    0x000000,    // цвет шрифта
    FONT_NAME,   // имя ttf-файла
    $text
  );
  $text=explode('/',FONT_NAME);
  $text=$text[count($text)-1];
  imagettftext( // вывод подписи шрифта
    $image,      // как всегда, идентификатор ресурса
    S_FONT_SIZE,   // размер шрифта
    0,           // угол наклона шрифта
    0,10,      // координаты (x,y), соответствующие левому нижнему
                 // углу первого символа
    0xdddddd,    // цвет шрифта
    'arial.ttf',   // имя ttf-файла
    $text
  );

  header('Content-type: image/png');
  imagepng($image);
  imagedestroy($image);

?>


Работаю дизайнером делаю для себя, и собратов по цеху навигатор по шрифтам(сильно жизнь упрощает) с возможностью скачивания(аналог сайтов со шрифтами, только локальный)

Код из чужого исходника работает на ура, НО не все шрифты рисуют буквы вопрос с чем это связано? 
В винде в превьюшки в прогах шрифты пишут и русскими и английскими буквами, а когда вывожу средствами PHP а именно imagettftext() на выходе пустота. Кто-нибудь может мне помочь понять по чему это происходит?
Могу предположить проблема в конвертации символов... iwin2uni но не знаю как её решить(смещение символов и т.д.). Функцию взял из мира и на этом форму её уже раза 2-3 встретил.

В дополнение ещё два вопроса:
1.  шрифт содержит дополнительную информации автора и лицензию её можно от туда выдрать как-нибудь?
2.  Как распечатать все символы которые есть в шрифте(русская английская раскладка)?
      То есть теоретически ответом на этот вопрос будет цикл рисующий картинки, только от куда до куда для меня загадка.

Скриншот проблемы ниже

p.s.: пока делал скриншот понял что проблема с английскими буквами связана с их отсутствием(то есть видно что нет стилизованных букв а стоят обычные, нашёл два шрифта где было ток две буквы стилизованные подставил их и они отрисовались. А вот с русским языком, т.е. где все русские буквы проблема не решилась, некоторые шрифты упорно ничего не рисуют =( ). Да других вопроса всё ещё актуальны


Это сообщение отредактировал(а) darktempler - 20.9.2011, 14:24

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  fonts.gif 95,89 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.