GotoKnow
  • เข้าระบบ
  • สมัครสมาชิก
  • แผงจัดการ
  • ออกจากระบบ
GotoKnow

PHP กับ Graph, Chart

ปกติแล้ว PHP เองก็สามารถวาดภาพได้ด้วย GD Library

What is gd?
gd is a graphics library. It allows your code to quickly draw images complete with lines, arcs, text, multiple colors, cut and paste from other images, and flood fills, and write out the result as a PNG or JPEG file. This is particularly useful in World Wide Web applications, where PNG and JPEG are two of the formats accepted for inline images by most browsers.

gd is not a paint program. If you are looking for a paint program, you are looking in the wrong place. If you are not a programmer, you are looking in the wrong place, unless you are installing a required library in order to run an application.

gd does not provide for every possible desirable graphics operation. It is not necessary or desirable for gd to become a kitchen-sink graphics package, but version 2.0 does include most frequently requested features, including both truecolor and palette images, resampling (smooth resizing of truecolor images) and so forth.


ซึ่ง GD Library เอง ได้รับความนิยมมาก โดยเฉพาะกลุ่ม opensource เราสามารถใช้ชุดคำสั่งในภาษาต่างๆ ซึ่งส่วนใหญ่จะมีให้ใช้แล้ว (build in) ดังนี้ PHP, PERL, OCaml, Tcl, Pascal, REXX และภาษาอื่นๆ อีก

จริงๆ เราสามารถใช้ GD ได้กับทุกๆ ภาษา โดยวิธีส่งไปให้โปรแกรมสร้างภาพ โดยผ่าน command line ก็ได้ ซึ่งโปรแกรมลักษณะนี้ ก็มีโปรแกรม fly ที่คุณ Martin Gleeson ได้พัฒนาขึ้นมา


การจะทำ Graph ด้วย PHP นั้น ก็ทำได้ไม่ยาก แค่วาดภาพกราฟฟิก ผู้พัฒนาอาจต้องมีความรู้เรื่องการคำนวณ การวาดภาพ เป็นต้น

ปัจจุบันมี script library ที่ช่วยในการวาดภาพหรือทำกราฟมากมาย ทั้งแบบ opensource และ commercial สำหรับ opensource เรามาดูกันว่า มีตัวไหนน่าสนใจบ้าง



JpGraph
user posted image
ผมคิดว่า JpGraph เป็น graph script ที่ดีที่สุด เท่าที่เห็นมา
user posted image

JpGraph Architecture
user posted image

ตัวอย่างการใช้งาน

$graph = new graph(150, 150, 'fig1.png', 0, false);
$graph->img->SetMargin(30, 30, 30, 30);
$graph->SetScale('textlin');
$line1 = new LinePlot($data);
$graph->Add($line1);
$graph->Stroke();


จะได้
user posted image


Introduction to JPGraph - Part I, Part II
Zend tutorial on how to use JpGraph

 



Libchart
user posted image
user posted image
user posted image
user posted image
ตัวอย่างการใช้งาน

 

include "libchart/libchart.php";

header("Content-type: image/png");

$chart = new VerticalChart(500,250);

$chart->addPoint(new Point("Jan 2005", 273));
$chart->addPoint(new Point("Feb 2005", 321));
$chart->addPoint(new Point("March 2005", 442));
$chart->addPoint(new Point("April 2005", 711));

$chart->setTitle("Monthly usage for www.example.com");
$chart->render();
?>





GDGraph 1.1
ว่าจะไม่เอามาลงอยู่แล้ว ไม่ได้มีจุดเด่นอะไรเท่าไหร่ สามารถสร้าง Bar Graph, Pie Graph และ Line Graph แต่ดูแล้วสู้ตัวอื่นไม่ได้
user posted image
user posted image
user posted image
user posted image


Links
GD Library
Libchart
jpgraph ออกภาษาไทยได้ไหม, คนไม่เคยใช้
อยากทราบวิธีทำ report ด้วย PHP ครับ
ลง PHP + GD Library บน Linux, ยังทำไม่สำเร็จ
วาดรูปให้เป็นแบบ dynamic

บันทึกนี้เขียนที่ GotoKnow โดย 

คำสำคัญ (keywords): opensourceitphp
หมายเลขบันทึก: 23341
เขียน:
แก้ไข:
ความเห็น: 4
อ่าน:
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ

ความเห็น (4)

ขอแจมมั่งครับ
การทำให้ JP Graph แสดงอักษรภาษาไทยได้

เริ่มต้นต้องไป define font ให้แก่ jpgraph.php
ประมาณบรรทัดที่ 70 จะเป็นการ define TTF นะครับ เราต้อง DEFINEfont ที่ต้องการใช้ไว้ ผมจะยกตัวอย่างเป็นTAHOMA นะครับ

DEFINE("FF_TAHOMA",n);


เลข n คือเลขลำดับน่ะครับ  เราก็ใส่เลขต่อจาก font ที่ define ไว้ก่อนหน้า (เช่น DEFINE("FF_MICROSS",44);
DEFINE("FF_TAHOMA",45);) นะครับ

 

ต่อไปจะเป็นการ define path ของ font น่ะครับ อาจจะ configure ใน jpg-configure หรือใน jpgraph.php

ประมาณบรรทัดที่ 52 ของ jpgraph.php จะมีเงื่อนไขว่า !define(TTF_DIR) น่ะครับ   ในเงื่อนไขนั้นจะมีให้ตั้ง path ของ font TTF ของ OS window กับ OS อื่นๆ  ใส่ path ของ font เข้าไปเลยครบ  เช่น เก็บ font TAHOMA.TTF ไว้ใน /home/www/htdocs/eutility/jpgraph/fonts/

ก็จะกำหนด TTF_DIR เป็น DEFINE('TTF_DIR','/home/www/htdocs/eutility/jpgraph/fonts/');

ตัวอย่างจากโค้ด

if (!defined('TTF_DIR')) {
 if (strstr( PHP_OS, 'WIN') ) {
  $sroot = getenv('SystemRoot');
  if( empty($sroot) ) {
   die('JpGraph Error: No path specified for TTF_DIR and path can not be determined automatically. Please specify TTF_DIR manually (in jpg-config.inc).');
  }else {
     DEFINE('TTF_DIR', $sroot.'/fonts/');
  }
 }else {
  DEFINE('TTF_DIR','/home/www/htdocs/eutility/jpgraph/fonts/');
 }
}

 

ต่อมาจะแก้ไข class TTF โดยแก้ไข array font_files

โดยเพิ่ม element เข้าไป ตัวอย่างจะเป็นการเพิ่ม element ของ font TAHOMA

FF_TAHOMA => array(FS_NORMAL=>'TAHOMA.TTF', FS_BOLD=>'tahomabd.TTF', FS_ITALIC=>'', FS_BOLDITALIC=>'' )

 

สุดท้ายต้องทำการเปลี่ยนโค้ดอักษรภาษาไทยสักหน่อย กระผมเองก็ไม่ทราบเหตุผลน่ะครับ(หุๆ ก็แค่ใช้เป็นน่ะครับ  ไม่ได้เก่งอะไรมากนัก) 

เอาฟังก์ชัน php อันนี้ไว้ใช้

function UniThai($s) {
  $x = "";
  $len = strlen($s);
  for ( $i = 0; $i < $len; $i++)
  {
   if ( ord($s[$i]) > 128 )
    $x .= "&#".(ord($s[$i]) - 160 + 3584).";";
   else
    $x .= $s[$i];
  }
  return $x;
 }

 

ตัวอย่างการเรียกใช้

$graphName="เปรียบเทียบการใช้ประปา";     
$graphName=UniThai($graphName); 
$graph->title->Set($graphName);
$graph->title->SetFont(FF_TAHOMA,FS_NORMAL);

อ่านไม่รู้เรื่องเลย  แฮ่ะๆ

เอาเป็นว่า ขั้นตอนการทำให้ jpgraph ใช้ภาษาไทยได้ก็จะมี

  1. หา font ไทย(TTF) upload ไปไว้ใน directory ที่สามารถเรียกใช้งานได้(มีสิทธิใช้งาน font ได้)
  2. ระบุ path directory ของ font ใน jpg-config.inc หรือใน jpgraph.php
  3. define font ใน jpgraph.php
  4. เพิ่ม element  ของ array font_file
  5. แปลง string ที่เราต้องการแสดงผล โดยนำ string ดังกล่าวผ่านฟังก์ชัน  UniThai($string)

มีปัญหาก็ติดต่อมาที่ [email protected] ได้นะครับ  ยินดีช่วยเหลือ

 

libchart-1.1 ใช้ภาษาไทยได้หรือเปล่าครับ

ขอคำแนะนำขั้นตอนการติดตั้ง PHP GD2 Library

ขอบคุณครับ