Actualites  Archives
Diffusez votre communiqué de presse
 Inscription | Plan du site | 51  visiteurs actifs  
  
     A la Une
  Actualités
  Dossiers
  Coin Technique
  Agenda des salons
  Outils Web

     Référencement
  Référencement professionnel
  Liens commerciaux
  Devis référencement

     Diagnostic
  Popularité Site Web
  Positionnement Moteur
  WebPage Alerte
  Positionnement Google

     Archives
  Sélection
  Expérience qui parle
  Internet quotidien
  Tous les dossiers

     Services
  Mise en conformité de site
  Hébergement
  Communiqués de Presse
  Contenu éditorial
  Webmastering

     Contact
  Nous contacter
  La protection des données personnelles

     Technique
  Merise

     Login
   
    
Inscription

Mot de passe oublié?

     Rechercher
    
   

 Sélection


Génération de graphiques avec PHP
L'internet est un outil de communication, et nous savons bien tous que si le message est important, l'enveloppe, son emballage l'est presque autant. Quand nous devons communiquer sur des séries de chiffres nous pensons tout de suite à des graphiques générés par notre tableur préféré et nous avons chacun le nôtre. Afin de garantir la compatibilité avec toutes les plate-formes et tous les navigateurs de la page contenant notre graphique, nous devons utiliser ou une applet ou une image. Nous allons survoler dans cet article, la génération à la volée d'image par PHP.

Présentation de l'exemple

Pour que cela fonctionne, il faut que la librairie GD soit installée et, suivant la version, vous pourrez générer des images au format GIF ou PNG pour les plus récentes. Une sombre histoire de licence a fait que la fabrication du GIF est soumise à des droits. Le monde de l'image a découvert alors l'exitence du format PNG, qui s'avère au bout du compte de meilleur qualité ! L'utilisation de la fonction phpinfo() vous indiquera l'existence ou non de cette librairie sur votre serveur.

Contrairement à d'autres applications avec PHP ou un autre langage, le graphisme fait un large appel aux système de coordonnées. Et dès que l'on sort de quelques lignes parallèles aux axes, il faut maîtriser un peu de trigonométrie. Cela remue les méninges ..

Je ne vais pas prendre un exemple standard de représentation graphique dune série de données numériques, mais celui du dessin d'une étoile à cinq branches. Quand on a compris le principe de tracé, on peut tout faire. Et mis à part quelques calculs trigonométriques...c'est plus simple qu'un histogramme !

Etude mathématique succinte

Notre étoile est donc tracée dans un cercle de rayon 1, le premier point est en (1.0). Les angles au centre entre deux points sont de

Mais le système de coordonnées des images n'est pas le repère mathématique habituel, le point (0,0) est le point en haut à gauche, qui correspond à notre (-1,-1)., L'image du repère a été générée avec PHP.

Nous allons donc travailler avec notre repère habituel et transformer les coordonnées par homothétie et translation.

Les sommets du pentagone ont pour coordonnées
(cos( 2*i*pi/5), sin( 2*i*pi/5)) ;-))) pour i variant de 0 à 4.
Et pour obtenir une étoile, on les joint de deux en deux, le tableau des coordonnées est mis en dur dans le script, afin de ne pas alourdir la présentation.

Création d'une image

Quel que soit le contenu de l'image, il faut commencer par la créer, du moins créer l'espace mémoire dans lequel nous allons écrire et dessiner. Nous utilisons imageCreate() qui prend deux paramètres la largeur et la hauteur, exprimés en pixels, de l'image en question. Cette fonction nous renvoie un handle ou un pointeur sur la zone mémoire, ce pointeur doit être fourni à toutes les autres fonctions de manipulation :
$hImg = imageCreate( 200, 200);

Quand nous aurons terminer de travailer notre image, nous devons la déclarer et ce n'est qu'à ce moment là que nous spécifions le type - gif, jpeg, png - de notre image. Créons une image PNG :
header("Content-type: image/png");
imagePng($hImg);
Nous devons spécifier à l'aide d'une entête spécifique au navigateur que ce qu'il va recevoir n'est pas du texte, nous lui en indiquons le type Mime.

Entre ces deux fonctions, il y a la création proprement dite de l'image.

Dessiner dans l'image

Notre étoile est juste un affaire de quleques liognes, c'est pour cela que j'ai choisi cet exemple.

La fonction imageLine sert à tracer une ligne entre les points (x1,y1) et (x2,y2):
imageLine( $hImg, $x1, $y1, $x2, $y2, $c);
où $c est une couleur déclarée par
$c = imageColorAllocate( $hImg, $r, $v, $b);
$r, $v et $b sont les valeurs RVB de la couleur, ce sont des entiers compris de façon standard entre 0 et 255.

Il suffit juste de faire un boucle pour parcourir notre tableau de coordonnées, en conservant le point d'arrivée comme départ de la ligne suivante :

// Tracé de l'étoile
$x1 = $X[0]; $y1 = $Y[0];
for( $i=1; $i<6; $i++) {
    $j=( $i%5);
    $x2 = $X[$j]; $y2 = $Y[$j];
    imageLine( $hImg, $x1, $y1, $x2, $y2, $c);
    $x1 = $x2; $y1 = $y2;
}

Les couleurs

La première couleur allouée est automatiquement utilisée comme couleur de fond. On alloue donc une couleur en premier comme couleur de fond.

Script complet

<?php
// Fonctions de service
function chgCoordX( $x) {
    global $hom;
    return $hom *( 1 + $x);
}

function chgCoordY( $y) {
    global $hom;
    return $hom *( 1 - $y);
}

// Dimension du graphique
$diagramWidth = $diagramHeight = 200;
$hom = $diagramWidth/2;

// Tableaux des coordonnées
for( $j=0; $j<5; $j++) {
    $A[$j] = cos( 2*$j*PI() / 5);
    $B[$j] = sin( 2*$j*PI() / 5);
}

// On croise les points (on les prende 2 en 2 modulo 5
$X[0] = chgCoordX( $A[0]); $Y[0] = chgCoordY( $B[0]);
$X[1] = chgCoordX( $A[2]); $Y[1] = chgCoordY( $B[2]);
$X[2] = chgCoordX( $A[4]); $Y[2] = chgCoordY( $B[4]);
$X[3] = chgCoordX( $A[1]); $Y[3] = chgCoordY( $B[1]);
$X[4] = chgCoordX( $A[3]); $Y[4] = chgCoordY( $B[3]);

// On construit l'image
$hImg = imageCreate( $diagramWidth, $diagramHeight);

// Allocation de la couleur de l'étoile
$colorBackgr = imageColorAllocate( $hImg, 255, 255, 255);
$c = imageColorAllocate( $hImg, 255, 0, 0);

// Tracé de l'étoile
$x1 = $X[0]; $y1 = $Y[0];
for( $i=1; $i<6; $i++) {
    $j=( $i%5);
    $x2 = $X[$j]; $y2 = $Y[$j];
    imageLine( $hImg, $x1, $y1, $x2, $y2, $c);
    $x1 = $x2; $y1 = $y2;
}

if ( imagetypes() & IMG_GIF) {
    header("Content-type: image/gif");
    imageGif($hImg);
} elseif (imagetypes() & IMG_PNG) {
    header("Content-type: image/png");
    imagePng( $hImg); //
} else {
    die("Pas de support graphique avec PHP sur ce serveur");
}
?>

Il y a des moyens plus rapide pour affecter les coordonnées, mais j'ai préféré détailler et isoler la partie mathématique de la partie graphisme afin que tout le monde s'y retrouve.

Voilà le résultat :

Télécharger le source au format .txt.

Conclusion

Vous pourrez vous entraîner à tracer des étoiles à plusieurs branches : 3, 4, 6, 7 etc.. Si vous tracez les polygones non croisés, on a vite fait de monter une animation qui montre que la série des polygones à n côtés tend vers le cercle quand n croit vers l'infini ...les mathématiques en douceur !

 

Daniel Lucazeau
www.ajornet.com
Chef de projet Internet

 

 Imprimer Donner votre avis

Actualités du Net

 
   Sondage
Selon vous, quel est le meilleur moyen d’obtenir du trafic sur un site internet ?
18%Les liens commerciaux
66%Le référencement naturel
7%Les bannières de publicité
3%La publicité hors ligne
7%Les communiqués de presse

   Archives
  La relation client / fournisseur 
  Les relations publiques sur Internet 
  Plus c'est long, plus c'est bon ? 
  Un bilan positif et nuancé de six ans de pratique de l'internet en entreprise 
  Tirez profit du partenariat  
  Bien organiser pour mieux développer  
  Le décryptage du génôme humain : impact sur le secteur des biotechnologies 
  Email et protection de la vie privee  
  Un site web est-il rentable ?  
  Les Metas  
  Pernod Ricard : l'alcool est dangereux pour la santé. 
  7 secrets pour un échec parfait 
  L'achat en ligne est sans risque 
  Révolution - Affiliation 
  Quand les programmes d'affiliation mènent au désastre ... (1/2) 
  Quand les programmes d'affiliation mènent au désastre ... (2/2) 
  L'achat d'espace en ligne 
  Gagner de l'argent avec son site 
  Y a-t'il quelqu'un pour acheter mon site ? (2ème partie) 
  Y a-t'il quelqu'un pour acheter mon site ? (1ère partie)  

 

Sam-Mag - Un site du réseau ACORUS 1996-2007
© Copyright ACORUS All rights reserved.- Mentions légales

Ce site respecte la loi Informatique et Libertés. Pour en savoir plus sur la protection des données personnelles, cliquez

référencement | achat de mot clé | référencement international | web actualités | boutique en ligne | statistiques web | referencement site web
communiqué de presse | référencement internet | référencement gratuit | referencement professionnel | referencement immobilier

 
Webmaster