Есть скрипт который рисует картинку заданным шрифтом.
| Код | <?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.: пока делал скриншот понял что проблема с английскими буквами связана с их отсутствием(то есть видно что нет стилизованных букв а стоят обычные, нашёл два шрифта где было ток две буквы стилизованные подставил их и они отрисовались. А вот с русским языком, т.е. где все русские буквы проблема не решилась, некоторые шрифты упорно ничего не рисуют =( ). Да других вопроса всё ещё актуальны
|