Génération d'images avec JPGraph (PHP 4)

Introduction

La principale librairie concernant la création de graphiques est la librairie JpGraph. C'est une librairie objet permettant de créer des graphiques avec un minimum de code. La librairie JpGraph assigne des valeurs par défaut logiques ce qui permet de créer des graphiques très complexes avec très peu de code.

Parmi les principales caractéristiques :

  • support des formats JPEG, PNG, GIF.
  • différents types de graphiques : line-plots, filled line-plots, accumulated line-plots, bar plots, accumulated bar plots, grouped bar plots, scatter plots, impuls plots, spider (a.k.a. Web) plots and pie charts.
  • gestion d'un module de cache permettant de minimiser l'utilisation du temps processeur.
  • gestion de l'antialiasing des lignes.

Configuration

JPGraph

Au 11.04.2003, la version 1.12 est la version officielle de JPGraph (http://www.aditus.nu/jpgraph/jpdownload.php)

Prérequis PHP

La version 4.1 de PHP au minimum permet de mettre en œuvre JPGraph. JPGraph 1.X n'est pas certifiée pour la version 5 de PHP.  JPGraph 2.0 supportera PHP version 5.

Prérequis GD

La librairie GD (librairie dédiée à la manipulation d'images) doit être installée. Les versions supportées de GD par JPGraph sont :

  • GD Library 1.8.x au minimum
  • GD 2.x dans un contexte d'utilisation des nouveautés de la version 2.

Pour télécharger GD Library (http://www.boutell.com/gd/)

Configuration de PHP avec GD

Windows

La version 4.x de PHP pour Windows offre directement les extensions nécessaires de la librairie GD. Le fichier php.ini permet d'implémenter l'extension GD :

php.ini
...
;extension=php_gd.dll => librairie GD 1.x (version à vérifier avec PHPInfo)
extension=php_gd2.dll =>  librairie GD 2
...

Linux - Unix Like

Installation de GD

La librairie GD nécessite une installation spéciale.

gd est installé dans le répertoire /usr/local avec une commande make.

Après récupération du fichier tar.gz de la librairie GD, extraire les fichiers de l'archive dans un répertoire quelconque après décompression:

cd ${download}
gunzip | uncompress tar xzf gd(1.x)(2.x).tar.gz
tar xzf gd(1.x)(2.x).tar

Lancer ensuite la compilation et l'installation de gd :

make

gd nécessite l'installation complémentaire des librairies suivantes :

Pour vérifier la bonne installation de GD, lancer le programme gddemo qui génère le fichier gif demoout.gif :

./gddemo

Ajout de GD à la configuration de PHP

Si la librairie GD est installée dans le répertoire $INSTALL_GD, PHP doit être compilée comme ci-dessous (pour la compilation de PHP, se reporter à la documentation correspondante) :

./configure ... ... ... --with-gd=$INSTALL_GD
make
make install

Vérification de l'implémentation de la librairie gd/

La fonction phpinfo() permet de vérifier l'implémentation effective de la librairie gd avec PHP :

gd
GD Support enabled
GD Version bundled (2.0 compatible)
FreeType Support enabled
FreeType Linkage with freetype
JPG Support enabled
PNG Support enabled
WBMP Support enabled

Utilisation

La librairie génère automatiquement les headers à envoyer au navigateur.

Pour utiliser la librairie deux fichiers doivent être au moins inclus, la librairie de base et une ou plusieurs extensions. Exemple :

<?php
  include ("jpgraph.php");
  include ("jpgraph_line.php");
  ...
  
  // Code utilisant la lib JPGraph
?>

La règle d'utilisation est simple:

  • création du type de graphique souhaité
  • définition des options et paramètres souhaités
  • appelle de la fonction stroke pour générer le fichier proprement dit

Parmi les types connus: spider-plots, pie-charts, scatter-plots, line-plots, filled line-plots, accumulated line- plots, bar plots, accumulated bar plots, grouped bar plots, error plots, line error plots et graphiques de Gantt.

Deux caractéristiques méritent une attention spéciale:

  • La génération automatique de limites d'échelle selon des critères esthétiques.
  • La gestion automatique d'un système de cache. En effet, lorsqu'on demande une figure, si rien n'a changé elle n'est pas régénérée mais sortie du cache. Pour le cas où un même script crée des images différentes à la volée, ce mécanisme peut être nuisible et doit être desactivé (quatrième argument de Graph avec une valeur de -1).

Exemples concrets

Lineplots

<?php
  include ("jpgraph.php");
  include ("jpgraph_line.php");
  
  // Application des valeurs dans un tableau
  $ydata = array(6,5,25,12,5,10,32,13,5,21);
  // Création de l'objet Graph.
  $graph = new Graph(300,200);
  $graph->SetScale("textlin");
  
  // Création du tracé
  $lineplot=new LinePlot($ydata);
  // Ajout du tracé au graph
  $graph->Add($lineplot);
  // Affichage du graphique
  $graph->Stroke();
?>
lineplots jpgraph

Camemberts


<?php
  include ("jpgraph.php");
  include ("jpgraph_pie.php");
  
  // Données
  $data = array(40,21,17,14,23);
  
  // Création du graph Pie. Ce dernier peut être mise en cache  avec PieGraph(300,300,"SomCacheFileName")
  $graph = new PieGraph(300,200);
  $graph->SetShadow();
  
  // Application d'un titre au camembert
  $graph->title->Set("Example 1 Pie plot");
  $graph->title->SetFont(FF_FONT1,FS_BOLD);
  
  // Création du graphe
  $p1 = new PiePlot($data);
  $graph->Add($p1);
  
  // .. Création effective du fichier
  $graph->Stroke();
?>
camembert jpgraph

Version 3D


<?php
  include ("../jpgraph.php");
  include ("../jpgraph_pie.php");
  include ("../jpgraph_pie3d.php");
  
  // Some data
  $data = array(20,17,15,20,15,25,25,10);
  
  // Create the Pie Graph.
  $graph = new
PieGraph(350,200,"pieex1"); $graph->SetShadow(); // Set A title for the plot $graph->title->Set("Example 1 3D Pie plot"); $graph->title->SetFont(FF_VERDANA,FS_BOLD,18); $graph->title->SetColor("darkblue"); $graph->legend->Pos(0.1,0.2); // Create 3D pie plot $p1 = new PiePlot3d($data); $p1->SetTheme("sand"); $p1->SetCenter(0.4); $p1->SetAngle(50); $p1->SetFont(FF_TIMES,FS_NORMAL,14); $p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); $graph->Add($p1); $graph->Stroke(); ?>
3D Pie Plot Jpgraph

Diagramme de Gantt

Pour la mise en œuvre d'un diagramme de Gantt, la version 1.5 de JPGraph au minimum doit être mise en place.


<?php
  include ("../jpgraph.php"); 
  include ("../jpgraph_gantt.php");
  
  // A new graph with automatic size 
  $graph = new GanttGraph(-1,-1,"auto");
  
  //  A new activity on row '0'
  $activity = new GanttBar(0,"Project","2001-12-21","2002-02-20");
  $graph->Add($activity);
  
  // Display the Gantt chart
  $graph->Stroke();
?>
Diagramme Gantt JPGraphe