Actualites��Forum��Archives
�Inscription | Livre d'or | Plan du site | 125� visiteurs actifs �
��
���� A la Une
� Actualit�s
� Dossiers
� Logiciels
� Coin Technique
� Agenda des salons
� Emploi
� Outils Web
� Annuaire Web

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

���� Forum
� Forum SAM-MAG

���� Guides
� Check-list de la promotion des sites
� Promouvoir et r�f�rencer les sites web

���� Contact
� Nous contacter
� Abonnement Newsletter D�sabonnement
� La protection des donn�es personnelles

���� Login
���
����
Inscription

Mot de passe oubli�?

�� Sondage
Comptez-vous d�poser un .EU ?
15%Oui c'est d�j� fait
15%tres certainement
5%probablement
10%peut �tre
55%non

���� Rechercher
����
���

Recherchez maintenant !
En partenariat avec amazon.fr
Google
Powered by FullXML
�Actualit�s > 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


�
�� R�f�rencement
�� R�f�rencement sur mesure
�� R�f�rencement international
�� Achat de mots cl�s
�� Devenir revendeur

�� Diagnostic
�� Calcul de popularit�
�� Pr�sence WEB
�� WebPage Alerte
�� Google position

�� Services
�� Mise en conformit� de site
�� H�bergement
�� Sponsoring de la newsletter Sam-Mag
�� Contacter les m�dias
�� Contenu �ditorial
�� Webmastering / D�veloppement

�� Top pages
� Coin Technique
� Dossiers
� Actualit�s
� S�lection
� Tous les dossiers

�� 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) �

�

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

Sam-Mag - Actualit�s du Web - Webmaster ressources - Mentions l�gales
Un site du r�seau ACORUS 1996-2005 � Copyright ACORUS
All rights reserved.

�
Webmaster