티스토리 뷰
jpgraph - php graph to image
클라이언트에서 운영되는 차트에는 HTML5 와 SVG를 적극적으로 이용하여 화려한 기능과 미려한 디자인을 겸비한
이 차트들은 모두 클라이언트의 웹 브라우저에서 실행되기 때문에 이메일을 통한 보고서 서비스를 지원하기에는
매우 어렵다는 단점이 있다.
그 단점이란 서버사이드 언어에 표현된 스크립트를 자바스크립트 쉘 등을 통하여 직접 인터프리터 해주어야하고 4
실제 해석이 되어도 브라우저호환 이라는 최종보스가 등장하기 때문이다. 더군다나 SVG로 그린 이미지는
어쨌든 이러한 복잡한 방법과 번거로운 절차를 없애기 위해서 이메일 보고서에 다음과 같은 방법으로 작업하기로 결정.
1. 먼저 이메일용 HTML을 마크업하고 Style을 마크업된 페이지에 직접 작성한뒤
인라인 스타일로 변경해주는 툴을 사용하여 스타일을 변경하고. ( 그렇지 않으면 그 엄청난 노가다를 직접해야 한다 ) 6
2. 차트는 jpgraph를 사용하여 메일링 보고서 서비스에 사용하기로 결정하였다. 7
jpgraph
1. 버전 : 2017. 04. 18 현재 버전은 JpGraph-4.0.2 (4.0.2) 이며 Free-release 이다.
2. 사용법
A. 아주 간단하게 사용하기
a-1. jpgraph.php 파일에 그래프를 만든다.
a-2. <img src='jpgraph.php' /> ... 끝이다.
Tip. 당연하겠지만
a-3. <img src='jpgraph.php?COMPANY_ID=1' /> ...처럼 GET 으로 변수를 넘겨줄수도 있다.
B . 파일로 사용하기
그래프 스트로크 부분을 주석처리 ( //$graph->Stroke(); )하고 다음과 같이 사용한다.
//$graph->Stroke();
$fileName = "/tmp/imagefile.png";
$graph->img->Stream($fileName);
C. base-64 로 이미지 인코딩하기. 만약 이미지를 상대경로, 절대경로가 아니라 직접 인코딩된 문자열로 사용하려면 적용한다.
// img to base64 encode
$path = 'imagefile.png';
$type = pathinfo($path, PATHINFO_EXTENSION); // png
$data = file_get_contents($path);
$base64 = 'data:image/'.$type.';base64,'.base64_encode($data);
// html 에서는
<img src='{$base64}' /> ... 로 사용
3. 결과 보기
위와 같이 이미지로 출력된다. 자세히 보면 한글이 모두 □□□□□ 으로 깨져있다.
한글깨짐 처리하기
1. 나눔고딕 ttf 파일 ( NanumGothic.ttf을 다운받아 jpgraph-4.0.2/src/fonts 폴더에 붙여넣는다.
현재 2017. 04. 18에 버전 JpGraph-4.0.2 (4.0.2) 에서 src > fonts 폴더가 존재하므로 여기에 넣어놓았다.
* 보통 C 드라이브에 Window > Font 폴더에 폰트가 있으므로 본인이 사용하려는 한글폰트(저작권 주의)를 사용하면 된다.
2. 이제 폰트 리스트 클래스에서 폰트를 선언하고 속성을 추가해준다.
src/jpgraph_ttf.inc.php 파일을 찾고 open
//nanum font
// 본인의 경우 jpgraph-4.0.2/src/fonts/ 에 폰트가 있고 jpgraph.php 입장에서는 바로 fonts/ 가 경로가 된다.
define("TTF_DIR","fonts/");
define("FF_NANUMGOTHIC", 13);
그다음 할일은 클래스에 등록(속성을 추가)한다.
FF_NANUMGOTHIC => array(
FS_NORMAL =>'NanumGothic.ttf',
FS_BOLD =>'NanumGothic.ttf',
FS_ITALIC =>'NanumGothic.ttf',
FS_BOLDITALIC =>'NanumGothic.ttf' ),
);
3. 이제 준비가 다 되었으니 실제 그래프를 사용하는 php 파일에서 사용해보도록 하자.
//title
$graph->title->SetFont(FF_NANUMGOTHIC,FS_BOLD,12);
$graph->title->Set('타이틀');
//legend
$graph->legend->SetFont(FF_NANUMGOTHIC,FS_BOLD,8);
$graph->legend->SetFrameWeight(1);
4. 결과
한글이 잘 출력되는 모습을 확인할 수 있다.
결과코드)
<?php // content="text/plain; charset=utf-8"
require_once ('jpgraph/jpgraph.php');
require_once ('jpgraph/jpgraph_line.php');
$datay1 = array(20,15,23,15);
$datay2 = array(12,9,42,8);
$datay3 = array(5,17,32,24);
// Setup the graph
$graph = new Graph(890,250);
$graph->SetScale("textlin");
$theme_class=new UniversalTheme;
$graph->SetTheme($theme_class);
$graph->img->SetAntiAliasing(false);
$graph->title->SetFont(FF_NANUMGOTHIC,FS_BOLD,12);
$graph->title->Set('타이틀');
$graph->SetBox(false);
$graph->img->SetAntiAliasing();
$graph->yaxis->HideZeroLabel();
$graph->yaxis->HideLine(false);
$graph->yaxis->HideTicks(false,false);
$graph->xgrid->Show();
$graph->xgrid->SetLineStyle("solid");
$graph->xaxis->SetTickLabels(array('A','B','C','D'));
$graph->xgrid->SetColor('#E3E3E3');
// Create the first line
$p1 = new LinePlot($datay1);
$graph->Add($p1);
$p1->SetColor("#6495ED");
$p1->SetLegend('사용량');
// Create the second line
$p2 = new LinePlot($datay2);
$graph->Add($p2);
$p2->SetColor("#B22222");
$p2->SetLegend('피크전력(최대수요)');
// Create the third line
$p3 = new LinePlot($datay3);
$graph->Add($p3);
$p3->SetColor("#FF1493");
$p3->SetLegend('작년동월사용량');
$graph->legend->SetFont(FF_NANUMGOTHIC,FS_BOLD,8);
$graph->legend->SetFrameWeight(1);
// Output line
$graph->Stroke();
?>
- https://www.amcharts.com/ [본문으로]
- http://www.highcharts.com/ [본문으로]
- http://www.fusioncharts.com/php-charts/ 비싸다..아주 비싸다 [본문으로]
- https://developer.mozilla.org/ko/docs/Web/JavaScript/%EC%89%98 [본문으로]
- https://html2canvas.hertzen.com/ [본문으로]
- https://www.myintervals.com/emogrifier.php [본문으로]
- http://jpgraph.net/ [본문으로]
'■ 백엔드 ■ > PHP' 카테고리의 다른 글
php 에서 <?php 가 아닌 <? 로 축약어 사용하기 (0) | 2018.03.19 |
---|---|
PHP - PHPExcel 에서 Dropdown 리스트 생성하기 (0) | 2017.05.31 |
php captcha (0) | 2015.06.23 |
PHP 세션 값 오류의 원인 (0) | 2015.06.18 |
rand( [int $min, int $max] ) (0) | 2015.03.03 |