B0nuse
Постоялец
- Регистрация
- 6 Июн 2009
- Сообщения
- 106
- Реакции
- 21
- Автор темы
- #11
Вобщем, т.к. вывод графика ограничивался максимальным размером массива, решил обойтись без него с сохранением результата в файл.
Вот что получилось:
Всем спасибо.
Вот что получилось:
PHP:
// Файл данных
$filename = "data.txt";
// проверяем наличие файла
if (!is_file($filename)) exit("Отсутсвует файл данных");
// Читаем содержимое файла
$arr = file($filename);
// Ширина изображения
$width=count($arr);
// Вычисляем высоту изображения
$height=0;
foreach($arr as $line){
$num = preg_split("|[;]+|",$line);
$height=max($height,(int)$num[2]);
}
// масштабируем
$height=$height/10;
$width=$width/100;
// Рисуем диаграмму
$img = imagecreatetruecolor($width + 20,$height + 30);
if (!$img) exit("Не удалось создать изображение");
// Формируем цвета
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
// Фон делаем белым
imagefill($img, 1, 1, $white);
// Делаем линии с подписями по У
$z=0;
$z1=50;
while($z<$height){
imageline($img,0,$height-$z,$width,$height-$z,$black);
imagestring($img,1,$width,$height-$z,$z*10,$black);
$z=$z+$z1;
}
// Рисуем график
$x=0;
$hour1=-1;
$date1=0;
foreach($arr as $line){
$num = preg_split("|[;]+|",$line);
$d_key = explode(".", $num[0]);
$date = mktime(0, 0, 0, (int)$d_key[1], (int)$d_key[0], (int)$d_key[2]);
$hour=(int)$num[1];
$usr=(int)$num[2];
// определяем У
$y=$height-$usr/10;
// если сменился час - подписываем в соответствующем месте по Х
if($hour>$hour1){
imagestring($img,1,$x/100,$height+5,$hour,$black);
$hour1=$hour;
}
// если сменилась дата - выводим вертикальную линию и подписываем в соответствующем месте по Х
if($date>$date1){
imagestring($img,1,$x/100,$height+15,date("Y-m-d",$date),$black);
imageline($img,$x/100,0,$x1/100,$height+15,$black);
$date1=$date;
$hour1=-1;
}
// рисуем линию графика
imageline($img,$x/100,$y,$x1/100,$y1,$black);
$x1=$x;
$y1=$y;
$x++;
}
// сохраняем изображение в файл
imagejpeg($img, "graph.jpg", 70);
// Отправляем изображение в окно браузера
header ("Content-type: image/jpeg");
imagejpeg($img);
imagedestroy($img);