За последние 24 часа нас посетили 17872 программиста и 1637 роботов. Сейчас ищут 2077 программистов ...

Отображение транскрипции английских слов на изображении

Тема в разделе "PHP для профи", создана пользователем Wlvio, 4 фев 2018.

  1. Wlvio

    Wlvio Новичок

    С нами с:
    4 фев 2018
    Сообщения:
    6
    Симпатии:
    1
    Здравствуйте товарищи! Вот ни в какую не хочет отображать правильно транскрипцию на изображении.
    Нужно нарисовать [ˈbrɪʧɪz], а выводит:
    [​IMG]
    Шрифт использую для транскрипций phontm.ttf. Google молчит. Надеюсь на вас.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    скрипт в студию
     
  3. Wlvio

    Wlvio Новичок

    С нами с:
    4 фев 2018
    Сообщения:
    6
    Симпатии:
    1
    PHP:
    1. <?php
    2.  
    3.     //Константы
    4.     require_once('../_config.php');
    5.     //Работа с базой данных
    6.     require_once('../'.LIBRARY.'mysqli.php');
    7.         $LiMySql = new LiMySql;
    8. //Слово на английском и транскрипция
    9.     $LiMySql -> sqlConnect();
    10.     $c = $LiMySql -> sqlQuery("select * FROM `words` WHERE `id`='2222' and `tc`!='' ORDER BY RAND() LIMIT 1");
    11.     $f = $LiMySql -> sqlArray($c);
    12. //Перевод
    13.     $g = $LiMySql -> sqlQuery("select * FROM `words_translate` WHERE `id_word`='".$f['id']."' LIMIT 0,2");
    14.     while ($s = $LiMySql -> sqlArray($g)) {
    15.         $translate = isset($translate) ? $translate.', '.$s['translate'] : $s['translate'];
    16.     }
    17. //Подготавливаем для вывода
    18.     $text = strtoupper($f['word']);
    19.     $transcription = '['. $f['tc'].']';
    20.     $translate = strtoupper(iconv('UTF-8','CP1251',$translate));
    21. // размер изображения
    22.     $img = imagecreatetruecolor(600, 350);
    23. // цвет фона
    24.     $bg = imagecolorallocate($img, 255, 255, 255);
    25.     imagefilledrectangle($img, 0, 0, 600, 350, $bg);
    26. //Водный знак
    27.     $pic = ImageCreateFromjpeg("../img/log.jpg");
    28.     imagecopy($img, $pic, 150, 16, 0, 0, 300, 318);
    29. // шрифт
    30.     $font = '../css/font/8428523.ttf';
    31.     $font_tc = '../css/font/phontm.ttf';
    32.     //$font_tc = $font;
    33. // цвет текста
    34.     $black = imagecolorallocate($img, 27, 4, 84);
    35.  
    36.  
    37. //СЛОВО НА АНГЛИЙСКОМ
    38. // вычисляем сколько места займёт текст
    39.     $bbox = imageftbbox(40, 0, $font, $text);
    40. // вычисляем координаты для центрирования
    41.     $x = (imagesx($img) - $bbox[4])/2;
    42.     $y = ((imagesy($img) - $bbox[5])/2)-40;
    43. // добавляем текст на изображение
    44.     imagefttext($img, 40, 0, $x, $y, $black, $font, $text);
    45.  
    46.  
    47. //ТРАНСКРИПЦИЯ
    48. // вычисляем сколько места займёт текст
    49.     $bbox = imageftbbox(22, 0, $font, $transcription);
    50. // вычисляем координаты для центрирования
    51.     $x = (imagesx($img) - $bbox[4])/2;
    52.     $y = (imagesy($img) - $bbox[5])/2;
    53. // добавляем текст на изображение
    54.     imagefttext($img, 22, 0, $x, $y, $black, $font_tc, $transcription);
    55.  
    56.  
    57. //ПЕРЕВОД
    58. // вычисляем сколько места займёт текст
    59.     $bbox = imageftbbox(22, 0, $font, $translate);
    60. // вычисляем координаты для центрирования
    61.     $x = (imagesx($img) - $bbox[4])/2;
    62.     $y = ((imagesy($img) - $bbox[5])/2)+40;
    63. // добавляем текст на изображение
    64.     imagefttext($img, 22, 0, $x, $y, $black, $font, $translate);
    65.  
    66.  
    67. // выводим изображение
    68.     header('Content-type: image/png');
    69.     imagepng($img);
    70. // освобождаем память
    71.     imagedestroy($img);
    72. ?>
     
    #3 Wlvio, 4 фев 2018
    Последнее редактирование: 4 фев 2018
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    во первых используйте
    mb_strtoupper
    место
    обычного, так как мы работаем с многобайтными символами.
    Удалите функцию iconv с вашего кода раз и навсегда. Мы только с utf-8 работаем only UTF-8 the best!
    --- Добавлено ---
    во вторых, в шрифте присутствуют символы как æ ? Мне неизвестно
    --- Добавлено ---
    P/s: да поддерживается http://studyenglishnow.ru/phonetictm/
     
  5. Wlvio

    Wlvio Новичок

    С нами с:
    4 фев 2018
    Сообщения:
    6
    Симпатии:
    1
    Но в том-то и проблема, что в шрифте присутствует "æ", а выводит " ". Грешил на библиотеку FreeType, но нет.
    Вся информация об отображении шрифта хранится в самом файле шрифта .tff.

    Из википедии:
    FreeType, FreeType 2библиотека, которая используется для растеризациишрифтов и операций над ними.
     
  6. Wlvio

    Wlvio Новичок

    С нами с:
    4 фев 2018
    Сообщения:
    6
    Симпатии:
    1
    Разобрался. Начал экспериментировать с другими шрифтами. Скачал http://allshrift.ru/font/arial-unicode-ms/ И все нормально сдало.
    Дело было в самом шрифте и текста. Не сопоставлялись текст и шрифт, поэтому так и выходило. Транскрипцию брал с API словаря яндекса. Надеюсь, полезная инфа.
     
    denis01 нравится это.