Source de ce script :
<!DOCTYPE html>
<title>Un dessin en PHP</title>
<?php
echo "Source de ce script :\n";
echo "<figure>\n";
highlight_file(__FILE__);
echo "</figure>\n";
echo "L'image ci-dessous est fabriquée par un script PHP.";
echo "<figure><img src=\"faireHisto.php\" alt=\"histogramme\" /></figure>";
echo "Voici le source PHP pour fabriquer l'image : ";
echo "<figure>\n";
highlight_file("faireHisto.php");
echo "</figure>\n";
?>
<?php
// Fabrique un histogramme
// void histogramme(string texteLegende, array data, [int pasGraduation] )
function histogramme($texteLegende, $data, $pasGraduation = 0) {
$maxValeur = max($data); // ^ ----------------------------
$maxValeur *= 1.1; // | |
if ($maxValeur == 0) // | |
$maxValeur = 1; // hauteur | |
$largeur = 600; // | |
$hauteur = 300; // v | |
$fonte = 2; // ^ | |
$hauteurLegende = 30; // hauteurLeg| |
$fonteLegende = 3; // v ----------------------------
// < largeur >
// par défaut, le pas est une puissance de 10
if ($pasGraduation == 0)
$pasGraduation = pow(10, round(log10($maxValeur))-1);
$img = ImageCreate($largeur, $hauteur + $hauteurLegende);
$couleurFond = ImageColorAllocate($img, 250, 240, 230); // linen
$couleurGrille = ImageColorAllocate($img, 100, 100, 100); // grey
$couleurBarre = ImageColorAllocate($img, 205, 85, 85); // IndianRed
$couleurTexte = ImageColorAllocate($img, 47, 79, 79); // DarkSlateGray
// dessin du fond
ImageFill($img, 0, 0, $couleurFond);
for ($valeur = 0; $valeur < $maxValeur; $valeur += $pasGraduation) {
$i = ($hauteur - round($hauteur * $valeur / $maxValeur));
ImageSetStyle($img, array($couleurGrille, $couleurGrille,
$couleurGrille, $couleurFond,
$couleurFond, $couleurFond));
ImageLine($img, 0, $i, $largeur, $i, IMG_COLOR_STYLED);
ImageString($img, $fonte, 5, $i-imageFontHeight($fonte), $valeur, $couleurTexte);
}
// dessin des barres
$nbdata = sizeof($data);
$largeurBarre = $largeur / ($nbdata+1) / 2;
$barreGauche = $largeurBarre/2;
reset($data);
while (list($nom, $valeur) = each($data)) {
$barreGauche += 2 * $largeurBarre;
$barreHaut = ($hauteur - round($hauteur * $valeur / $maxValeur));
ImageFilledRectangle($img, $barreGauche, $barreHaut, $barreGauche+$largeurBarre, $hauteur, $couleurBarre);
//inscrire le nom verticalement dans le rectangle
$labelX = $barreGauche + $largeurBarre/2;
$labelY = $hauteur - 10;
ImageStringUp($img, $fonte, $labelX, $labelY, $nom, $couleurTexte);
}
if ($hauteurLegende > 0)
ImageString($img, $fonteLegende, $largeurBarre, $hauteur+$hauteurLegende/2, $texteLegende, $couleurTexte);
// on crée du png, donc on indique son type mime
//header("Content-type: image/png");
ImagePng($img);
}
$systemes = array ("Windows en 1998" => 38,
"Netware en 1998" => 19,
"Linux en 1998" => 16,
"Autres Unix en 1998" => 23,
"Autres en 1998" => 4,
"Windows en 1999" => 38,
"Netware en 1999" => 15,
"Linux en 1990" => 25,
"Autres Unix en 1999" => 19,
"Autres en 1999" => 3,
"Windows en 2000" => 41,
"Netware en 2000" => 14,
"Linux en 2000" => 27,
"Autres Unix en 2000" => 17,
"Autres en 2000" => 1
);
histogramme("Repartition des ventes mondiales de serveurs en %", $systemes);
?>