РНР 5 в подлинникеСтраница 294 из 554 |
||
|
Гпава 30. Работа с изображениями 593 Таблица 30.1 (окончание) Смещение, байт Тип Описание 12—15 long Высота (в пикселах) каждого знака (height) От 16 и выше array Массив с информацией о начертании каждого символа, по од- ному байту на пиксел. На один символ, таким образом, приходится widthxheight байтов, а на все — widthxheightxnchars байтов. О означает отсутствие точки в данной позиции, все остальное — ее присутствие Замечание J В большинстве случаев гораздо удобнее брать уже готовые шрифты, чем делать новые самостоятельно. Вы можете найти их в Интернете. Параметры шрифта После того как шрифт загружен, его можно использовать (встроенные шрифты, конечно же, загружать не требуется). int imageFontHeight(int $font) Возвращает высоту в пикселах каждого символа в заданном шрифте. int imageFontWidth(int $font) Возвращает ширину в пикселах каждого символа в заданном шрифте. Вывод строки int imageString(int $im, int $font, int $x, int $y, string $s, int _$col) Выводит строку $s в изображение $im, используя шрифт $font и цвет $coi. Пара ($х, $у) будет координатами левого верхнего угла прямоугольника, в который вписана строка. int imagestringUp (int $im, int $font, int $x, int $y, string $s, int $c) Эта функция также выводит строку текста, но не в горизонтальном, а в вертикальном направлении. Верхний левый угол, по-прежнему, задается координатами ($х, $у). Работа со шрифтами TrueType Библиотека GD поддерживает также работу с векторными масштабируемыми шрифтами PostScript и TrueType. Мы с вами рассмотрим только последние, т. к., во-первых, их существует великое множество (благодаря платформе Windows), а во-вторых, с ними проще всего работать в РНР. 594 Часть IV. Стандартные функции РНР (__Замечание ) Для того чтобы заработали приведенные ниже функции, РНР должен быть откомпилирован и установлен вместе с библиотекой FreeType, достулной по адресу http:// www.freetype.org. В Windows-версии РНР она установлена по умолчанию. Большинство хостинг-провайдеров добавляют ее и под Unix. Всего существуют две функции для работы со шрифтами TrueType. Одна из них выводит строку в изображение, а вторая — определяет, какое положение эта строка бы заняла при выводе. Вывод строки list imageTtf Text (int $im, int $size, int $angle, int $x, int $y, int $col, string $fontfile, string $text) Эта функция помещает строку Stext в изображение Sim цветом $col. Как обычно, $coi должен представлять собой допустимый идентификатор цвета. Параметр $angie задает угол наклона в градусах выводимой строки, отсчитываемый от горизонтали против часовой стрелки. Координаты (Sx, Sy) указывают положение так называемой базовой точки строки (обычно это ее левый нижний угол). Параметр $size задает размер шрифта, используемый при выводе строки. Наконец, $ font file должен содержать имя TTF-файла, в котором, собственно, и хранится шрифт. Внимание! Параметр $fontfiie должен всегда задавать абсолютный путь (от корня файловой системы) к требуемому файлу шрифтов. Что самое интересное, в некоторых версиях РНР функции все же работают с относительными именами. Но в любом случае лучше подстелить соломку— абсолютные пути еще никому не вредили, не правда ли?.. Если у вас в программе задано относительное имя TTF-файла, используйте realpath () для конвертации его в абсолютное. Функция возвращает список из 8 элементов. Первая их пара задает координаты (х, у) верхнего левого угла прямоугольника, описанного вокруг строки текста в изображении, вторая пара — координаты верхнего правого угла, и т. д. Так как в общем случае строка может иметь любой наклон $angie, здесь требуются 4 пары координат. Внимание! И, тем не менее, функция всегда возвращает координаты так, будто бы угол Sangle равен нулю. Пример использования этой функции мы рассмотрим чуть ниже. Проблемы с русскими буквами Если вы хотите выводить текст, содержащий русские буквы, то должны вначале перекодировать его в специальное представление. В этом представлении каждый знак кириллицы имеет вид &#хххх, где хххх— код буквы в кодировке Unicode. Знаки препинания и символы латинского алфавита в перекодировании не нуждаются. Ниже, в листинге 30.7, мы рассмотрим функцию tounicodeEntities о, которая производит все необходимые преобразования. |
| |
|
В начало ←предыдущая следующая→ ... 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 ... | ||