| <?
header("Conect-type: image/gif");
$cells=array(linked=>200, hated=>400, indeferent>900);//количество прямоугольников, с которыми программа работатет
$max=max($cells);//находим найбольшее значение
$total=count($cells);//подсчитываем общее количество прямоугольников
$totalwidth=300;//общая ширина изображения
$totalheigth=200;//общая высота изображения
$xgutter=20;//размер левого/правого поля
$ygutter=20;//размер верхнего/нижнего поля
$internalgap=10;//расстояние между полями
$bottomspace=30;//размер верхнего поля отведенную под область метки (тоесть под текст)
$font="C:\WINDOWS\Fonts\lmline.ttf";//путь к шрифту
$graphCanX=($totalwidth-$xgutter*2);//рабочая ширина изображения по х
$graphCanY=($totalheigth-$ygutter*2-$bottomspace);//рабочая ширина изображения по у
$posX=$xgutter;//ширина поля по х или место где начнется первый прямоугольник
$posY=$totalheigth-$ygutter-$bootomspace;//изьяв из общей высоты нижние и верхние поле, а также место под метки, получим место под изображения по у
$cellwidth=(int) (($graphCanX-($internalgap*(total-1)))/$total);//ширина одного прямоугольника (сколько бы не было прямоугольников растояние между ними будет на единицу меньше, вычисть это растоя ние из рабочей облости и поделить на количество прямоугольников)
$textsize=(int) ($bottomspace);//высота текста равна высоте отведенной области
while (list($key,$val)=each($cells))//проверка всех элементов массива на соответсвие текста отведенной области
{
while(1)
{
$box=imageTTFbox($textsize, 0, $font, $key);//информация о размере всего текста метки блогодаря функции imageTTFbox
// !!!!!!!!!!! Fatal error: Call to undefined function imageTTFbox() in c:\proba\x_13.php on line 23 !!!!!!!!!!!!!
$textWidth=$box[2];//элемент $box[2] содержит горизонтальную координату правого нижнего угла текста, будем считать это значение равным ширине текста, сохроняя его в переменной $textWidth
if($textWidth<$cellwidth)//берем ширину текста и сравниваем его с переменной $cellwidth, которая содержит ширину каждого прямоугольника в гистограме
break;//прирывания цикла, в случаи если ширина текста меньше ширины прямоугольника
$textsize--;//в противном случаи уменьшаем размер текста на единицу и проверяем снова
}
}
$image=imagecreate($totalWidth, $totalheigth);//в индификаторе изображения imagecreate задаем ширину и высоту изображения
$red=imagecolorallocate($image, 255,0,0);//задаем красный цвет
$black=imagecolorallocate($image, 0,0,0);//задаем черный цвет
$grey=imagecolorallocate($image, 100, 100, 100);//задаем серый цвет
reset ($cells);//расмотрение каждого элемента массива $cells сново
while(list($key, $val)=each($cells))//перебор всех элементов массива
{
$cellheigth=(int)(($val/$max)*$graphCanY);//расчет высоты прямоугольника
$center=(int)($posX+($cellWidth/2));//расчет координаты центральной точки прямоугольника по х
imagefilledrectangle($image, $posX, ($posY-$cellheigth), ($posX+$cellwidht), $posY, $blue);//на основе полученных переменных ресуем прямоугольник залитый голубым цветом
$box=imageTTFbox($textsize, 0, $font, $key);//выравнивание текста с помощью функции imageTTFbox
$tw=$box[2];//использование переменной $box[2] как рабочию ширину
imageTTFtext($image, $textsize, 0, ($center-($tw/2)), ($totalheigth-$ygutter), $black, $font, $key);//вывод текста
$posX+=($cellwidth+$internalgap);//увеличивается $posX для перехода к следующему прямоугольнику
}
imagegif($image);//вывод изображения
?> | |