ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Создание графических изображений. Часть Четвёртая.


15-06-2015

25.4. Круговые диаграммы
Круговые диаграммы являются хорошим способом отображения доли определенных показателей в суммарном показателе. Данные представляются сектором круга и выделяются определенным цветом. Условные обозначения раскрывают связь между значением и обозначением на диаграмме.
Как следует из самого названия круговой диаграммы, она представляется в виде круга и является более сложным объектом, чем гистограмма. Функции создания изображений, имеющиеся в PHP, позволяют создать сектор круга. Поскольку каждый сектор является частью целого, сценарий должен принять решение, сколько градусов отводится под каждый сектор, разделив значение, отведенное для данного сектора, на суммарную величину. Затем наступает очередь функции imagefilledarc.
Как и в случае с гистограммой, данные, используемые в круговой диаграмме, задаются в массиве, заданном в листинге 25.4. Конечно, можно обновлять значения массива каждый раз, когда изменяются данные, но лучше выбирать данные из базы данных. Результат работы сценария представлен на рис. 25.4. 
Листинг 25.4. Создание круговой диаграммы

<?php
// инициализация параметров $ChartDiameter = 300;
$ChartFont = 5;
$ChartFontHeight = imagefontheight($ChartFont); $ChartData = array(
"Beef"=>"99",
"Pork"=>"75",
"Chicken"=>"15",
"Lamb"=>"66",
"Fish"=>"22"); //задать размеры графика $ChartWidth = $ChartDiameter + 20; $ChartHeight = $ChartDiameter + 20 +
(($ChartFontHeight + 2) * count($ChartData));
// получить итоговое значение $ChartTotal = array_sum($ChartData); // задать центр диаграммы $ChartCenterX = $ChartDiameter/2 + 10; $ChartCenterY = $ChartDiameter/2 + 10; // создать изображение
$image = imagecreate($ChartWidth, $ChartHeight); imageantialias($image, TRUE);
// создать круглую кисть для прорисовки границ $dot = imagecreate(10, 10);
$dotColorBlack = imagecolorallocate($dot, 0, 0, 0); $dotColorTransparent = imagecolorallocate($dot, 255, 0, 255); imagecolortransparent($dot, $dotColorTransparent); imagefill($dot, 0, 0, $dotColorTransparent); imagefilledellipse($dot, 4, 4, 5, 5, $dotColorBlack); imagesetbrush($image, $dot); // распределить цвета
$colorBody = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$colorBorder = imagecolorallocate($image, 0x00, 0x00, 0x00);
$colorText = imagecolorallocate($image, 0x00, 0x00, 0x00);
$colorSlice = array(
imagecolorallocate($image, 0xFF, 0x00, 0x00), imagecolorallocate($image, 0x00, 0xFF, 0x00), imagecolorallocate($image, 0x00, 0x00, 0xFF), imagecolorallocate($image, 0xFF, 0xFF, 0x00), imagecolorallocate($image, 0xFF, 0x00, 0xFF), imagecolorallocate($image, 0x00, 0xFF, 0xFF), imagecolorallocate($image, 0x99, 0x00, 0x00), imagecolorallocate($image, 0x00, 0x99, 0x00), imagecolorallocate($image, 0x00, 0x00, 0x99), imagecolorallocate($image, 0x99, 0x99, 0x00), imagecolorallocate($image, 0x99, 0x00, 0x99), imagecolorallocate($image, 0x00, 0x99, 0x99));
// залить фон
imagefill($image, 0, 0, $colorBody); /*
** прорисовать каждый сектор
*/ 
$Degrees = 0; $slice=0;
foreach($ChartData as $label=>$value)
{
$StartDegrees = round($Degrees); $Degrees += (($value/$ChartTotal)*360); $EndDegrees = round($Degrees);
$CurrentColor = $colorSlice[$slice%(count($colorSlice) //нарисовать сектор imagefilledarc( $image,
$ChartCenterX, $ChartCenterY,
$ChartDiameter,$ChartDiameter, $StartDegrees, $EndDegrees,
$CurrentColor, IMG_ARC_PIE);
//нарисовать сектор $LineY = $ChartDiameter + 20 + ($slice*($ChartFontHeight+2));
imagerectangle($image, 10,
$LineY,
10 + $ChartFontHeight, $LineY+$ChartFontHeight, $colorBorder); imagefilltoborder($image, 12,
$LineY + 2,
$colorBorder, $CurrentColor); imagestring($image, $ChartFont,
20 + $ChartFontHeight, $LineY,
"$label: $value", $colorText); $slice++;
}
// начертить границу imageellipse($image,
$ChartCenterX, $ChartCenterY,
$ChartDiameter,$ChartDiameter,
IMG_COLOR_BRUSHED);
// вывести изображение header("Content-type: image/png"); imagepng($image);
?>
Создание графических изображений
25.5. Вытянутые однопиксельные изображения
Описанный в этом разделе метод извлекает преимущество из возможностей большинства браузеров использовать свойства длины и ширины тега изображения. Для этого не требуется расширения GD, так как оно в действительности не манипулирует изображением. Оно использует возможности браузера для удлинения изображений, чтобы соответствовать заданному тегу IMG. Это позволяет удлинить однопик-сельное изображение, чтобы получить большой столбец.
Обратимся к рис. 25.5. HTML-таблица здесь используется для того, чтобы выровнять обозначения и столбцы. Наибольший элемент данных заполнит 100% ширины графика, которая задается переменной graphWidthMax. Элементы выбираются из массива данных и масштабируются относительно значения переменной graphWidthMax. Это позволяет создавать горизонтально ориентированный график, но этим же методом можно воспользоваться для создания вертикального графика. Для того чтобы обеспечить правильность отображения графика во всех браузерах, можно потратить несколько секунд и предварительно очистить изображение. 
Листинг 25.5. Гистограмма с использованием вытянутых изображений

<?php
//инициализация параметров $graphWidthMax = 4 0 0; $graphData = array(
"Beef"=>"99",
"Pork"=>"75",
"Chicken"=>"15",
"Lamb"=>"66",
"Fish"=>"22");
$barHeight = 10; $barMax = max($graphData);

print("<table border="0">n");

foreach($graphData as $label=>$rating)
{
//вычислить длину
$barWidth = intval($graphWidthMax * $rating/$barMax);

print("<tr>n"); //обозначение
print("<th>$label</th>n");
//data
print("<td>");
print("<img src="reddot.png" ");
print("width="$barWidth" height="$barHeight" ");
print("border="0">");
print("</td>n");
print("</tr>n");
}
print("</table>n");
?>
Создание графических изображений

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Создание графических изображений. Часть Третья. PHP. Создание программного обеспечения