В листинге 23.3 я привожу пример сценария, который использует возможности вывода TrueType-øрифтов, а также демонстрирует работу с цветом RGB. Хотя размер примера довольно велик, рисунок, который он генерирует, выглядит довольно привлекательно
(см. рис. 23.1)[E115][DK116] .
Листинг 23.3. Вывод строки произвольного формата
<?
// Аналог imageColorAllocate() (по умолчанию), но работает не с
// RGB-тройкой, а с цветом в формате XXYYZZ, где:
// * XX — red-составляющая в шестнадцатеричном формате;
// * YY — green-составляющая в шестнадцатеричном формате;
// * ZZ — blue-составляющая в шестнадцатеричном формате.
// Можно указать другую функцию получения цвета, задав ее
// имя в параметре $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