웹개발 - PHP 프로그램 개발 강의
글수 707
그래프 만드는 소스가 필요해서 여기 게시판을 뒤졌더니 zzony 님 소스가 나오더군요.
그 소스를 함수화 해서 쉽게 쓸수 있도록 고쳤습니다.
아래 소스는 폼 데이터를 전송 받아 그래프를 생성하지만
폼 데이터 대신 소스에서 생성된 데이터로 그래프를 만드는것이
직접 사용하는 방식이 될겁니다.
zzony 님 원래 글 : http://www.nzeo.com/bbs/zboard.php?id=p_study&desc=asc&no=293
소스 테스트 : http://allzza.net/my.php
수정한대로 그래프가 고쳐지지 않으면 새로고침해서 보세요
<?
$e = "./tt/test.png";
if($a) {
$aa = explode(",",$a);
if($d) $dd = explode(",",$d);
bar_graph($aa,$b,$c,$dd,$e);
echo "<img src="$e">";
}
function bar_graph($val,$x,$y,$x_val,$img_url) { //-- 막대 그래프 만들어주는 함수
/*
$val : 값을 원소로 하는 배열
$x : 그래프 가로축 크기
$y : 그래프 세로축 크기
$x_val : x축 값의 이름 배열
$img_url : 저장할 파일의 경로와 이름(png)
*/
$gaesu = count($val); //-- 그래프 막대 갯수
$makde_pok = ($x / $gaesu) / 3; //-- 막대 하나 폭
$real_y = $y - 40; //-- 그래프가 그려질 실제 위치
$max_value = $val[0];
for ($i=0;$i<$gaesu;$i++) {
if($val[$i] > $max_value) $max_value = $val[$i];
}
$im = @ImageCreate($x,$y) or die ("이미지를 초기화 하지 못했습니다");
$backgroundcolor=ImageColorAllocate($im,234,253,231); //-- 그랩 바탕색
$rectanglecolor = ImageColorAllocate($im,65,127,250); //-- 그랩 색깔
$white=ImageColorAllocate($im,255,255,240); //-- 그랩 바닥색
ImageFilledRectAngle($im,0,$real_y,$x,$y,$white);
for ($i=0;$i<$gaesu;$i++) {
($i == 0) ? $makde_x[$i] = $makde_pok: $makde_x[$i] = ($makde_x[$i - 1] + $makde_pok * 3);
$makde_y[$i] = $real_y - ($val[$i]/$max_value) * $real_y; //-- 각각의 막대 y 좌표
ImageFilledRectAngle($im,$makde_x[$i],$makde_y[$i],$makde_x[$i]+$makde_pok,$real_y,$rectanglecolor);
($makde_y[$i] - 15 < 0) ? $y_string = 0 : $y_string = $makde_y[$i] - 15;
Imagestring($im,5,$makde_x[$i],$y_string,$val[$i],imagecolorallocate($im,42,31,21));
Imagestring($im,3,$makde_x[$i],$y-30,$x_val[$i],imagecolorallocate($im,42,31,21));
}
ImagePNG($im,$img_url);
ImageDestroy($im);
}
?>
<form name=my method=post action="<?=$PHP_SELF;?>">
값 : <input type=text size=50 name=a value="<?=$a;?>"><br>
가로 : <input type=text size=5 name=b value="<?=$b;?>"><br>
세로 : <input tpye=text size=5 name=c value="<?=$c;?>"><br>
값이름 : <input type=text size=50 name=d value="<?=$d;?>"><br>
파일 이름 : <input type=text readonly size=30 value="<?=$e;?>" name=e><br>
<input type=button value="구래푸 맹글기" onclick='this.form.submit()'>
</form>
값 : 각 그래프가 가르키는 값입니다. 콤마로 구분하고 맨뒤엔 콤마를 찍지 마세요.
물론 각각의 값은 숫자....여야겠죠.
가로 : 그래프 가로 크기입니다.픽셀 단위.
세로 : 그래프 세로 크기. 픽셀 단위
값이름 : 그래프 밑에 각각의 막대를 값으로 가지는 이름. 역시 콤마로 구분하고 맨뒤엔 콤마 찍지 마세요.
한글 들어가니까 글자가 깨지네요.
파일이름 : 폴더와 파일 이름을 적어주는데 폴더는 nobody 에게 쓰기 권한이 있어야 합니다.
(이해하기 힘들면 그냥 퍼미션 **7 로 끝자린 7로 맞추심 됩니다.)
나도 인터넷 셋방 사는 처지라서 파일 이름은 바꾸지 못하게 고정 시켜놨습니다.
이런저런 그림파일이 계정에 생성 되면.... 내 방 좁아질까봐서리...
그래프의 막대 갯수는 값을 기준으로 생성 됩니다. 값이름이 갯수에 모자라면 null 로 채워지고
값이름이 갯수에서 남으면 남은 부분은 써지지 않습니다.
그 소스를 함수화 해서 쉽게 쓸수 있도록 고쳤습니다.
아래 소스는 폼 데이터를 전송 받아 그래프를 생성하지만
폼 데이터 대신 소스에서 생성된 데이터로 그래프를 만드는것이
직접 사용하는 방식이 될겁니다.
zzony 님 원래 글 : http://www.nzeo.com/bbs/zboard.php?id=p_study&desc=asc&no=293
소스 테스트 : http://allzza.net/my.php
수정한대로 그래프가 고쳐지지 않으면 새로고침해서 보세요
<?
$e = "./tt/test.png";
if($a) {
$aa = explode(",",$a);
if($d) $dd = explode(",",$d);
bar_graph($aa,$b,$c,$dd,$e);
echo "<img src="$e">";
}
function bar_graph($val,$x,$y,$x_val,$img_url) { //-- 막대 그래프 만들어주는 함수
/*
$val : 값을 원소로 하는 배열
$x : 그래프 가로축 크기
$y : 그래프 세로축 크기
$x_val : x축 값의 이름 배열
$img_url : 저장할 파일의 경로와 이름(png)
*/
$gaesu = count($val); //-- 그래프 막대 갯수
$makde_pok = ($x / $gaesu) / 3; //-- 막대 하나 폭
$real_y = $y - 40; //-- 그래프가 그려질 실제 위치
$max_value = $val[0];
for ($i=0;$i<$gaesu;$i++) {
if($val[$i] > $max_value) $max_value = $val[$i];
}
$im = @ImageCreate($x,$y) or die ("이미지를 초기화 하지 못했습니다");
$backgroundcolor=ImageColorAllocate($im,234,253,231); //-- 그랩 바탕색
$rectanglecolor = ImageColorAllocate($im,65,127,250); //-- 그랩 색깔
$white=ImageColorAllocate($im,255,255,240); //-- 그랩 바닥색
ImageFilledRectAngle($im,0,$real_y,$x,$y,$white);
for ($i=0;$i<$gaesu;$i++) {
($i == 0) ? $makde_x[$i] = $makde_pok: $makde_x[$i] = ($makde_x[$i - 1] + $makde_pok * 3);
$makde_y[$i] = $real_y - ($val[$i]/$max_value) * $real_y; //-- 각각의 막대 y 좌표
ImageFilledRectAngle($im,$makde_x[$i],$makde_y[$i],$makde_x[$i]+$makde_pok,$real_y,$rectanglecolor);
($makde_y[$i] - 15 < 0) ? $y_string = 0 : $y_string = $makde_y[$i] - 15;
Imagestring($im,5,$makde_x[$i],$y_string,$val[$i],imagecolorallocate($im,42,31,21));
Imagestring($im,3,$makde_x[$i],$y-30,$x_val[$i],imagecolorallocate($im,42,31,21));
}
ImagePNG($im,$img_url);
ImageDestroy($im);
}
?>
<form name=my method=post action="<?=$PHP_SELF;?>">
값 : <input type=text size=50 name=a value="<?=$a;?>"><br>
가로 : <input type=text size=5 name=b value="<?=$b;?>"><br>
세로 : <input tpye=text size=5 name=c value="<?=$c;?>"><br>
값이름 : <input type=text size=50 name=d value="<?=$d;?>"><br>
파일 이름 : <input type=text readonly size=30 value="<?=$e;?>" name=e><br>
<input type=button value="구래푸 맹글기" onclick='this.form.submit()'>
</form>
값 : 각 그래프가 가르키는 값입니다. 콤마로 구분하고 맨뒤엔 콤마를 찍지 마세요.
물론 각각의 값은 숫자....여야겠죠.
가로 : 그래프 가로 크기입니다.픽셀 단위.
세로 : 그래프 세로 크기. 픽셀 단위
값이름 : 그래프 밑에 각각의 막대를 값으로 가지는 이름. 역시 콤마로 구분하고 맨뒤엔 콤마 찍지 마세요.
한글 들어가니까 글자가 깨지네요.
파일이름 : 폴더와 파일 이름을 적어주는데 폴더는 nobody 에게 쓰기 권한이 있어야 합니다.
(이해하기 힘들면 그냥 퍼미션 **7 로 끝자린 7로 맞추심 됩니다.)
나도 인터넷 셋방 사는 처지라서 파일 이름은 바꾸지 못하게 고정 시켜놨습니다.
이런저런 그림파일이 계정에 생성 되면.... 내 방 좁아질까봐서리...
그래프의 막대 갯수는 값을 기준으로 생성 됩니다. 값이름이 갯수에 모자라면 null 로 채워지고
값이름이 갯수에서 남으면 남은 부분은 써지지 않습니다.
2004.10.17 05:45:53 (*.55.29.88)
Imagestring 함수에서 한글 입력 하는 방법 가르쳐주시는분 계시면
무척 이뻐해드릴껀데......ㅡ,.ㅡ
막대그래프 + 선그래푸 : http://allzza.net/my2.php
무척 이뻐해드릴껀데......ㅡ,.ㅡ
막대그래프 + 선그래푸 : http://allzza.net/my2.php
2004.10.17 23:48:00 (*.222.254.115)
이것을 응용하면 활용할 부분이 많이 많아보이네요.
통계시스템이라던가? 근데.. 너무 단순한 것이 흠인데...
그래도 좋은 소스 감사하고요.
그래도 새로운 소스를 내놓으신 미친개님... 감사하네요.
새롭게 눈을 떴습니다.
통계시스템이라던가? 근데.. 너무 단순한 것이 흠인데...
그래도 좋은 소스 감사하고요.
그래도 새로운 소스를 내놓으신 미친개님... 감사하네요.
새롭게 눈을 떴습니다.
2004.10.18 16:26:41 (*.50.10.196)
GD에서 한글을 입력하는 가장 좋은 방법은 iconv 라이브러리를 이용하는 겁니다.
물론 서버에 설치되어있어야겠죠. iconv("EUC-KR", "UTF-8",$val[$i]) 요렇게 쓰면 됩니다.
서버에 iconv가 설치되어있지 않다면 최효섭님의 함수를 이용하면 됩니다.
http://phpschool.com/bbs2/inc_view.html?id=9597&code=tnt2이곳에서 다운로드하실 수 있구요..
str2uni($val[$i]) 이케 하면 되겠죠.
물론 서버에 설치되어있어야겠죠. iconv("EUC-KR", "UTF-8",$val[$i]) 요렇게 쓰면 됩니다.
서버에 iconv가 설치되어있지 않다면 최효섭님의 함수를 이용하면 됩니다.
http://phpschool.com/bbs2/inc_view.html?id=9597&code=tnt2이곳에서 다운로드하실 수 있구요..
str2uni($val[$i]) 이케 하면 되겠죠.
2004.10.18 20:18:22 (*.55.29.88)
TheMics/
조언 감사합니다.
두번째 함수는 미스최파일을 인꿀루드 해서 쓰시란 말씀 같은데
해보니 ttf 이미지 생성에서는 한글대신 � 같이 그냥 유니코드값이
뿌려집디다.
첫번째껀 확인해보겠습니다.
라이브러리라면 인클루드해서 써야 하는건지 아니면 그냥 써도 되는 함수인지 궁금하네요.
조언 감사합니다.
두번째 함수는 미스최파일을 인꿀루드 해서 쓰시란 말씀 같은데
해보니 ttf 이미지 생성에서는 한글대신 � 같이 그냥 유니코드값이
뿌려집디다.
첫번째껀 확인해보겠습니다.
라이브러리라면 인클루드해서 써야 하는건지 아니면 그냥 써도 되는 함수인지 궁금하네요.
2004.10.19 00:00:13 (*.50.10.196)
어라 이상하네요..imagestring 대신 imagettftext로 한번 테스트해보세요;;
그리고 iconv는 서버에 설치만 되어있다면 바로 사용 가능합니다. :)
그리고 iconv는 서버에 설치만 되어있다면 바로 사용 가능합니다. :)


