Example #1
0
$x = 20;
for ($i = 0; $i < $iPoints; $i++) {
    $y = rand(20, GRAPH_HEIGHT - 20);
    $aCoords[$x] = $y;
    $x += $dx;
}
$vImagegHeight = GRAPH_HEIGHT + 30;
$vImage = imagecreatetruecolor(GRAPH_WIDTH + 50, $vImagegHeight);
$vBgColor = imagecolorallocate($vImage, 160, 160, 160);
$vTextColor = imagecolorallocate($vImage, 0, 0, 0);
$vAxisColor = imagecolorallocate($vImage, 0, 0, 0);
$vDotColor = imagecolorallocate($vImage, 192, 64, 64);
imagefill($vImage, 0, 0, $vBgColor);
$oPlot = new Plot($aCoords);
$oPlot->drawDots($vImage, $vDotColor, 10, GRAPH_HEIGHT, 8);
$oCurve = new CubicSplines();
$vColor = imagecolorallocate($vImage, 225, 64, 64);
$iStart = microtime(1);
if ($oCurve) {
    $oCurve->setInitCoords($aCoords, 1);
    $r = $oCurve->processCoords();
    if ($r) {
        $curveGraph = new Plot($r);
    } else {
        continue;
    }
} else {
    $curveGraph = $oPlot;
}
$curveGraph->drawLine($vImage, $vColor, 10, GRAPH_HEIGHT);
// unset($oCurve);
Example #2
0
 public function drawDestructorsChart($imgFile, $destructors, $skale)
 {
     $destructorsCnt = count($destructors);
     $scaler = 1.53;
     $width = round(600 * $scaler);
     $height = round((50 + 60 * $destructorsCnt) * $scaler);
     $img = imagecreatetruecolor($width, $height);
     $min = round($skale['min']);
     $max = round($skale['max']);
     $bgColor = imagecolorallocate($img, 255, 255, 255);
     imagefill($img, 0, 0, $bgColor);
     // рисуем оси
     $axisColor = imagecolorallocate($img, 134, 134, 134);
     imageline($img, 20 * $scaler, 50 * $scaler, 400 * $scaler, 50 * $scaler, $axisColor);
     imageline($img, 20 * $scaler, 50 * $scaler + 1, 400 * $scaler, 50 * $scaler + 1, $axisColor);
     imageline($img, 400 * $scaler, 50 * $scaler, 400 * $scaler, (50 + $destructorsCnt * 55) * $scaler, $axisColor);
     imageline($img, 401 * $scaler, 48 * $scaler, 401 * $scaler, (48 + $destructorsCnt * 55) * $scaler, $axisColor);
     imagettftext($img, round(10 * $scaler), 0, 397 * $scaler, 42 * $scaler, $axisColor, dirname(__FILE__) . '/fonts/georgia.ttf', $min);
     imagettftext($img, round(10 * $scaler), 0, 430 * $scaler, 42 * $scaler, $axisColor, dirname(__FILE__) . '/fonts/georgia.ttf', 'баллы');
     // рисуем вспомогательные линии
     $steps = $max - $min;
     $onePointWidth = (400 - 20) / $steps * $scaler;
     for ($i = $min; $i < $max; $i++) {
         $x = 400 * $scaler - $i * $onePointWidth;
         imageline($img, $x, 48 * $scaler, $x, (50 + $destructorsCnt * 55) * $scaler, $axisColor);
         // подписываем шкалу
         imagettftext($img, round(10 * $scaler), 0, $x - 3 * $scaler, (48 - 6) * $scaler, $axisColor, dirname(__FILE__) . '/fonts/georgia.ttf', $i + 1);
     }
     // рассчитываем какой деструктор каким цветом красим
     $maxValue = 0;
     $warningDestructorsKeys = array();
     $badDestructorsKeys = array();
     foreach ($destructors as $dKey => $desructor) {
         if ($desructor['val'] > $maxValue) {
             $badDestructorsKeys = array();
             $badDestructorsKeys[] = $dKey;
             $maxValue = $desructor['val'];
         } elseif ($desructor['val'] == $maxValue) {
             $badDestructorsKeys[] = $dKey;
         }
         if ($desructor['val'] - 1 > 0.4) {
             $warningDestructorsKeys[] = $dKey;
         }
     }
     // обрабатываем деструкторы
     $ind = 0;
     $destructorsTextColor = imagecolorallocate($img, 0, 0, 0);
     $destructorBadColor = imagecolorallocate($img, 227, 133, 163);
     $destructorComColor = imagecolorallocate($img, 255, 255, 255);
     $destructorWarnColor = imagecolorallocate($img, 232, 198, 130);
     $averageColor = imagecolorallocate($img, 210, 142, 5);
     $bordersColor = imagecolorallocate($img, 127, 127, 127);
     $averageCoords = array();
     foreach ($destructors as $dKey => $desructor) {
         // подписываем шкалы деструкторов
         $sizes = imagettfbbox(round(12 * $scaler), 0, dirname(__FILE__) . '/fonts/time.ttf', $desructor['name']);
         if ($sizes[2] > (600 - 410) * $scaler) {
             $name = $this->divideString($desructor['name']);
             $nameY = (75 + $ind * 55) * $scaler;
             if (!$name) {
                 $name = $desructor['name'];
                 $nameY = (84 + $ind * 55) * $scaler;
             }
         } else {
             $name = $desructor['name'];
             $nameY = (84 + $ind * 55) * $scaler;
         }
         imagettftext($img, round(12 * $scaler), 0, 405 * $scaler, $nameY, $destructorsTextColor, dirname(__FILE__) . '/fonts/time.ttf', $name);
         // рисуемы бары деструкторов
         $barWidth = ($desructor['val'] - $min) * $onePointWidth;
         $barHeight = 39 * $scaler;
         $dColor = in_array($dKey, $badDestructorsKeys) ? $destructorBadColor : (in_array($dKey, $warningDestructorsKeys) ? $destructorWarnColor : $destructorComColor);
         $this->drawBar($img, 400 * $scaler - $barWidth, (58 + $ind * 55) * $scaler, 400 * $scaler - 1, (97 + $ind * 55) * $scaler, $dColor);
         // рисуем границу бара
         $style = array($axisColor, $axisColor, $axisColor, $axisColor, $axisColor, $axisColor, $axisColor, $bgColor, $bgColor, $bgColor);
         imagesetstyle($img, $style);
         imageline($img, 400 * $scaler - $barWidth, (58 + $ind * 55) * $scaler, 400 * $scaler - 1, (58 + $ind * 55) * $scaler, IMG_COLOR_STYLED);
         imageline($img, 400 * $scaler - $barWidth, (58 + $ind * 55) * $scaler, 400 * $scaler - $barWidth, (97 + $ind * 55) * $scaler, IMG_COLOR_STYLED);
         imageline($img, 400 * $scaler - $barWidth, (97 + $ind * 55) * $scaler, 400 * $scaler - 1, (97 + $ind * 55) * $scaler, IMG_COLOR_STYLED);
         // выводим значение бара
         imagettftext($img, round(12 * $scaler), 0, 400 * $scaler - $barWidth - 26 * $scaler, (84 + $ind * 55) * $scaler, $axisColor, dirname(__FILE__) . '/fonts/time.ttf', str_replace('.', ',', number_format(round($desructor['val'], 1), 1)));
         imagettftext($img, round(12 * $scaler), 0, 400 * $scaler - $barWidth - 26 * $scaler - 1, (84 + $ind * 55) * $scaler, $axisColor, dirname(__FILE__) . '/fonts/time.ttf', str_replace('.', ',', number_format(round($desructor['val'], 1), 1)));
         // отмечаем средние + подготавливаем их для кривой
         if ($desructor['av']) {
             $averageCoords[(78 + $ind * 55) * $scaler] = 400 * $scaler - ($desructor['av'] - $min) * $onePointWidth;
             $this->drawDiamond($img, 400 * $scaler - ($desructor['av'] - $min) * $onePointWidth - 5 * $scaler, (78 + $ind * 55) * $scaler - 5 * $scaler, 10 * $scaler, $averageColor);
         }
         $ind++;
     }
     // делаем легенду
     $style = array($axisColor, $axisColor, $axisColor, $axisColor, $axisColor, $axisColor, $axisColor, $bgColor, $bgColor, $bgColor);
     imagesetstyle($img, $style);
     imageline($img, 30 * $scaler, 10 * $scaler, 55 * $scaler, 10 * $scaler, IMG_COLOR_STYLED);
     imageline($img, 30 * $scaler, 10 * $scaler, 30 * $scaler, 20 * $scaler, IMG_COLOR_STYLED);
     imageline($img, 30 * $scaler, 20 * $scaler, 55 * $scaler, 20 * $scaler, IMG_COLOR_STYLED);
     imageline($img, 55 * $scaler, 10 * $scaler, 55 * $scaler, 20 * $scaler, IMG_COLOR_STYLED);
     imagettftext($img, 10 * $scaler, 0, 60 * $scaler, 20 * $scaler, $destructorsTextColor, dirname(__FILE__) . '/fonts/time.ttf', 'Все без самооценки');
     if (count($averageCoords)) {
         $style = array($averageColor, $averageColor, $averageColor, $averageColor, $averageColor, $averageColor, $averageColor, $bgColor, $bgColor, $bgColor);
         imagesetstyle($img, $style);
         imagesetthickness($img, 3);
         imageline($img, 210 * $scaler, 15 * $scaler, 255 * $scaler, 15 * $scaler, IMG_COLOR_STYLED);
         imagettftext($img, 10 * $scaler, 0, 264 * $scaler, 20 * $scaler, $destructorsTextColor, dirname(__FILE__) . '/fonts/time.ttf', 'Среднее по всем оцениваемым руководителям');
         $this->drawDiamond($img, 227 * $scaler, 10 * $scaler, 10 * $scaler, $averageColor);
         // рисуем кривую среднюю
         //imageantialias($img, true);
         if (count($averageCoords) > 1) {
             $curve = new CubicSplines();
             $curve->setInitCoords($averageCoords, 1);
             $curveCoords = $curve->processCoords();
             $this->drawCurve($img, $curveCoords, $averageColor);
         }
     }
     imagepng($img, $imgFile);
     imagedestroy($img);
 }
Example #3
0
 /**
  * function imageCubicSmoothLine() - 
  * Draws a smooth line 
  *
  * @param   image    the image to draw on
  * @param   color    color created by imagecolorallocatealpha
  * @param   coords   array with points coordinates (x1 => y1, x2 => y2, etc)
  *
  */
 function imageCubicSmoothLine($image, $color, $coords)
 {
     $oCurve = new CubicSplines();
     if ($oCurve->setInitCoords($coords, 6) !== false) {
         if (!($r = $oCurve->processCoords())) {
             $r = $coords;
         }
     } else {
         $r = $coords;
     }
     list($iPrevX, $iPrevY) = each($r);
     while (list($x, $y) = each($r)) {
         $this->imageSmoothAlphaLineLarge($image, round($iPrevX), round($iPrevY), round($x), round($y), $color);
         $iPrevX = $x;
         $iPrevY = $y;
     }
 }