| |
к как в общем случае строка может иметь любой наклон $angle, здесь
тре-
буются 4 пары координат.
Вот пример использования этой функции:
Листинг 23.2. Вывод TrueType-строки
// Выводимая строка
$string="Hello world!";
// Создаем рисунок подходящего размера
$im = imageCreate(300,40);
// Создаем в палитре новые цвета
$black = imageColorAllocate($im, 0, 0, 0);
$orange = imageColorAllocate($im, 220, 210, 60);
// Закрашиваем картинку
imageFill($im,0,0,$black);
// Рисуем строку текста (файл times.ttf расположен в текущем каталоге)
imagettftext($im,50,0,20,35,$orange,getcwd()."/times.ttf",$string);
// Сообщаем о том, что далее следует рисунок PNG
Header("Content-type: image/png");
// Выводим рисунок
Глава 23. Работа с изображениями 329
imagePng($im);
?>
Определение границ строки
list imageTTFBBox(int $size, int $angle, string $fontfile, string $text)
Эта функция ничего не выводит в изображение, а просто определяет, какой размер
и
положение заняла бы строка текста $text размера $size, выведенная под углом
$angle в какой-нибудь рисунок. Параметр $fontfile, как и в функции
imageTTFText(), задает абсолютный путь к файлу шрифта, который будет исполь-
зован при выводе.
Возвращаемый список содержит всю информацию о размерах строки в формате, по-
хожем на тот, что выдает функция imageTTFText(). Однако порядок точек в нем
отличается (табл. 23.2).
Таблица 23.2. Содержимое списка, возвращаемого функцией
Индексы Что содержится
0 и 1 (x,y) левого нижнего угла
2 и 3 (x,y) правого нижнего угла
4 и 5 (x,y) правого верхнего угла
4 и 5 (x,y) левого верхнего угла
Пример
В листинге 23.3 я привожу пример сценария, который использует возможности выво-
да TrueType-шрифтов, а также демонстрирует работу с цветом RGB. Хотя размер
примера довольно велик, рисунок, который он генерирует, выглядит довольно при-
влекательно (см. рис. 23.1).
Листинг 23.3. Вывод строки произвольного формата
// Аналог imageColorAllocate() (по умолчанию), но работает не с
// RGB-тройкой, а с цветом в формате XXYYZZ, где:
// * XX — red-составляющая в шестнадцатеричном формате;
// * YY — green-составляющая в шестнадцатеричном формате;
// * ZZ — blue-составляющая в шестнадцатеричном формате.
Часть IV. Стандартные функции PHP 330
// Можно указать другую функцию получения цвета, задав ее
// имя в параметре $func (например, imageColorClosest).
function imageColorHex($im, $c, $func="imageColorAllocate")
{ // Сначала дополняем нулями в начале, если нужно
for($i=strlen($c); $i<6; $i++) $c='0'.$c;
$r=hexdec(substr($c,0,2));
$g=hexdec(substr($c,2,2));
$b=hexdec(substr($c,4,2));
return $func($im,$r,$g,$b);
}
// Первым делом устанавливаем параметры по умолчанию. Эти
// параметры можно переопределять при вызове сценария
// (например, ttf.php?a=20&f=arial&text=Hi+there)
if(!@$a) $a=30; // угол поворота (по умолчанию 30)
if(!@$s) $s=80; // размер шрифта (80)
if(!@$b) $b="00AAAA"; // цвет заднего плана (зеленовато-голубой)
if(!@$c) $c="FFFF00"; // цвет букв (ярко-желтый)
if(!@$d) $d=10; // зазор между текстом и границей рисунка
if(!@$f) $f="times"; // шрифт
if(!@$text) $text="Hello world!"; // текст
// Получаем границы рамки текста
$Bnd=imageTTFBBox($s,$a,getcwd()."/$f.ttf",$text);
// Массивы x- и y-координат всех точек
$X=$Y=array();
// Заполняем эти массивы на основании $Bnd
for($i=0; $i<4; $i++) {
$X[]=$Bnd[$i*2];
$Y[]=$Bnd[$i*2+1];
}
// Вычисляем размер картинки с учетом зазора $d
$MX=max($X)-min($X)+$d*2; // размер по x
$MY=max($Y)-min($Y)+$d*2; // размер по y
// Теперь вычисляем координаты базовой точки строки, чтобы
// она располагалась точно по центру поля картинки
$x=$d+$Bnd[0]-min($X)+2;
$y=$d+$Bnd[1]-min($Y)+2;
// Создаем рисунок нужного размера
Глава 23. Работа с изображениями 331
$im = imageCreate($MX,$MY);
// Создаем в палитре новые цвета
$black = imageColorHex($im, 0); // черный (тень)
$back = imageColorHex($im, $b); // задний план
$front = imageColorHex($im, $c); // цвет букв
// Очищаем задний план
imageFill($im,0,0,$back);
imageRectangle($im,0,0,$MX-1,$MY-1,$black);
// Выводим тень от текс
|
|