php로 꺾인선 그래프를 만들어보자

프로그래밍/PHP|2015. 1. 27. 11:34
반응형

우선은 php의 이미지 함수를 이용해야 한당!!

그리고 리눅스에는 GD Library가 최신걸로 셋팅이 되어있어야 하구요!!

없으면 깔어셔야 합니다.

 

우선 test.html 에 이 소스를 붙이죠

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<img src="graph.php?0,0,0,0,0.5,2.2,7.1,20.9,42.3,26.9"  width="274" height="188" border="0">
</BODY>
</HTML>
이렇게 말입니다.

graph.php?0,0,0,0,0.5,2.2,7.1,20.9,42.3,26.9 --> 요거는 머냐구요?? 그래프를 그릴 좌표값입니다.

보시면 아시것지만 graph.php 이파일에  좌표값을 전달하는 것이지요

그리고 본격적으로 그래프를 그릴 소스파일을 만듭니다.

 

graph.php 파일에

 

<? 
  Header("Content-type : image/png"); 
  
  $query_string = urldecode(getenv("QUERY_STRING")); 
  $query_string = explode("," , $query_string); 
 
  for ($i=0; $i<10; $i++){
   if ($y_max < intval($query_string[$i])){
    $y_max = intval($query_string[$i]);
    }
  }
  
  $image = ImageCreate(274,188); 
  $white = ImageColorAllocate($image , 255,255,255); 
  $skin = ImageColorAllocate($image , 250,219,172); 
  $black = ImageColorAllocate($image , 0,0,0); 
  $dark_gray = ImageColorAllocate($image , 241,241,241); 
  
  ImageLine($image , 33,15,233,15, $black); 
  ImageLine($image , 33,15,33,165, $black); 
  ImageLine($image , 33,165,233,165, $black); 
  ImageLine($image , 233,15,233,165, $black);
  ImageLine($image , 25,20,25,170, $black); 
  ImageLine($image , 25,170,225,170, $black);
  
  ImageString($image , 2, 3, 4,"Man(%)",$black);
  ImageString($image , 2, 250, 174,"Avg",$black);

  //x축 안선
  for ($i=25; $i < 160; $i=$i+10){
  ImageLine($image , 33,$i,233,$i, $dark_gray); 
  }

  //x축 대칭
  for ($i=20; $i<171; $i=$i+10){
  ImageLine ($image,25,$i,33,$i-5,$black); 
  }
  
  // y축 안선
  for ($i=53; $i < 230; $i=$i+20){
  ImageLine($image , $i,15,$i,165, $dark_gray); 
  }
  
  // y축 대칭
  for ($i=25; $i<226; $i=$i+20){
   ImageLine ($image,$i,170,$i+10,165,$black); 
   }
  
  //x축 값
  $x_position =22;
  $x_value =0;
  for ($i=0; $i<=10; $i++){
 ImageString($image,2,$x_position,175,$x_value,$black);
 $x_position= $x_position + 20;
 $x_value = $x_value + 10;
  }
  
  //y축 값
  $y_position = 23;
  if ( $y_max <=  35){
   $y_value = 28;
  } else {
   $y_value = $y_max;
  } 
  
   $temp = intval($y_value/7);
   $y_value = $temp * 7 +7;
   $y_max = $y_value;
   $skip = $temp +1;
  
  for ($i=0; $i<=7; $i++) {
    ImageString($image,2,7,$y_position,$y_value,$black);
 $y_position=$y_position+20;
 $y_value = $y_value - $skip;
  }
  
 // 막대그래프 꺽은선 그래프
  $rectPosition =35;
  $linePosition =40;
  for ($i=0; $i<10; $i++) {
    $y_rectPosition = 145 * intval($query_string[$i])/$y_max;
 $y_rectPosition = 170-$y_rectPosition;
    imageFilledRectangle($image, $rectPosition ,$y_rectPosition,$rectPosition+10,167, $skin);
 imageFilledRectangle($image, $linePosition-2, $y_rectPosition-2, $linePosition+2, $y_rectPosition+2 ,$black);
 $rectPosition = $rectPosition +20;
 if ($i != 0){
 ImageLine($image ,$temp1,$temp2,$linePosition,$y_rectPosition, $black); 
 }
 $temp1 = $linePosition;
 $temp2 = $y_rectPosition;
 $linePosition = $linePosition +20;
  }
    
  ImagePNG($image); 
  ImageDestroy($image); 
 
?>
요렇게 말입니다. ㅎㅎㅎㅎ

 

[출처] 홀로서기 | 한아름 (http://blog.naver.com/sire81/60014014950)

반응형

댓글()