Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Последние сообщения
Ответить
1

Рисуем график на PHP

Drunya

  • Man of God
  • Админ
  • 3527
  • Репутация:110 
  • Предупреждения: 0 
  • Регистрация:
    30 Ноя -0001
#1
Вот чисто ради общего развития я решил сегодня нарисовать график спользуя PHP. Получилось довольно хорошо, правда можно было бы еще проверять максимальное входящее значение чтобы если оно больше ожидаемого график не вылозил за границы, но я добился чего хотел - просто сделал рабчий скрипт, а если мне понадобитс он в работе то я его усовершенствую, а вам просто хочу показать принцып

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
<?php header('Content-type: image/jpeg');
//создаем изображение 1000 на 500px
$im = imagecreate(1000, 500);
//заливаем фон. У этой функции есть особенность - при первом вызове она заливает картинку а при последующих просто создает указатели на цвета
$background = imagecolorallocate($im, 243, 243, 243);
//определяем цвета для разметки и самого графика
$line_color = imagecolorallocate($im, 0, 255, 0);
$market_color = imagecolorallocate($im, 170, 170, 170);


//рисуем разметку(сетку)
$line = imageline($im, 0, 20, 1000, 20, $market_color);
$line = imageline($im, 0, 40, 1000, 40, $market_color);
$line = imageline($im, 0, 60, 1000, 60, $market_color);
$line = imageline($im, 0, 80, 1000, 80, $market_color);
$line = imageline($im, 0, 100, 1000, 100, $market_color);
$line = imageline($im, 0, 120, 1000, 120, $market_color);
$line = imageline($im, 0, 140, 1000, 140, $market_color);
$line = imageline($im, 0, 160, 1000, 160, $market_color);
$line = imageline($im, 0, 180, 1000, 180, $market_color);
$line = imageline($im, 0, 200, 1000, 200, $market_color);
$line = imageline($im, 0, 220, 1000, 220, $market_color);
$line = imageline($im, 0, 240, 1000, 240, $market_color);
$line = imageline($im, 0, 260, 1000, 260, $market_color);
$line = imageline($im, 0, 280, 1000, 280, $market_color);
$line = imageline($im, 0, 300, 1000, 300, $market_color);
$line = imageline($im, 0, 320, 1000, 320, $market_color);
$line = imageline($im, 0, 340, 1000, 340, $market_color);
$line = imageline($im, 0, 360, 1000, 360, $market_color);
$line = imageline($im, 0, 380, 1000, 380, $market_color);
$line = imageline($im, 0, 400, 1000, 400, $market_color);
$line = imageline($im, 0, 420, 1000, 420, $market_color);
$line = imageline($im, 0, 440, 1000, 440, $market_color);
$line = imageline($im, 0, 460, 1000, 460, $market_color);
$line = imageline($im, 0, 480, 1000, 480, $market_color);
$line = imageline($im, 0, 1000, 1000, 1000, $market_color);


//массив значений
$stats = array(2, 3, 4, 6, 7, 23, 54, 2, 32, 43, 324);

//сам график
if (!empty($stats)) {
    
$x_step = 0;
    
$y_step = 500;
    
$cnt_rec = count($stats);
    if (
$cnt_rec > 1000) {
        
$dif = ceil($cnt_rec / 1000);
    }
    
$step_size = floor(1000 / count($stats));
    
    foreach(
$stats as $key => $day) {
        
$day_point = 500 - $day;
        
$line = imageline($im, $x_step, $y_step, $x_step + $step_size, $day_point, $line_color);
        
$x_step = $x_step + $step_size;
        
$y_step = $day_point;
        
//pr($x_step);
    
}
    
}
//выводим картинку
imagejpeg($im);
//удаляем картинку
imagedestroy($im);?>

При построении графика упор больше не на знания в области PHP а на математику. Но даже если с этим трудности то методом тыка можно добиться результатов. Это простой пример создания графика на PHP, но с его помощью можно создавать и очень сложные рисунки, такие как спирали и кривые Бизье.

При рисовании подобных приколов в ход идет функция imageline она рисует линию основываясь на переданных ей параметрах, таких как начальные и конечные координаты и цвет линии, а также указатель на изображение на котором эту линию нужно нарисовать.

Отредактировано автором 9 Окт 2010
Я горжусь тем, что создал бесплатную CMS - AtomX. И люблю нашу команду)
1
Сейчас online: 3. Зарегистрированных: 0. Гостей: 3.