travaux-pratiques

BibliothequeGdPhp

Bibliothèque GD


ancien --> Installer la bibliothèque gd

Pour vérifier si la bibliothèque est bien installé sur votre système, ajoutez la fonction phpinfo();
dans un programme php et ensuite vérifiez la présence de la bibliothèque.

SI celle-ci n'est PAS installée :
  • sudo apt install php-gd
  • sudo /etc/init.d/apache2 restart


<?php
phpinfo
();
?>

Si la bibliothèque est installée vous devriez trouver une section comme celle-ci (CTRL-F gd) :

gd

GD Support enabled
GD Version bundled (2.1.0 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.6.2
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version 9 compatible
PNG Support enabled
libPNG Version 1.5.26
WBMP Support enabled
XPM Support enabled
libXpm Version 30411
XBM Support enabled
WebP Support enabled


Résultat -->
<IMG SRC="http://travaux-pratiques.net/fichiers/graphisme.png" width="85%">



Éléments de documentation :


Quelques exemples


Choisir une image et l'envoyer à l'affichage avec getimagesize() --> getimagesize

<?php
list($width$height$type$attr) = getimagesize("images/chat01.jpg");
echo 
"<img src=\"images/chat01.jpg\" $attr alt=\"Exemple avec getimagesize()\" />";

echo(
"width = " $width);
echo(
"height = " $height);
?>



La même chose, mais on affiche les informations sur l'image --> getimagesize2

<?php
list($width$height$type$attr) = getimagesize("images/chat01.jpg",$info);
echo(
"<BR> ---------------->");
// print_r ($list[$width]);
echo ("<BR><BR>");

echo (
"Variable largeur = " $width "<BR>");
echo (
"Variable hauteur = " $height "<BR>");
echo (
"Variable type = " $type "<BR>");
echo (
"Variable attr = " $attr "<BR>");

echo (
"<BR><BR>");
echo 
"<img src=\"images/chat01.jpg\" $attr alt=\"Exemple avec getimagesize()\" />";
?>


Note:
  • Cette fonction ne nécessite pas la bibliothèque GD.


carre-rouge

Note :
  • Attention de ne mettre aucun caractère avant le code PHP, même pas un espace !

<?php
    
// on spécifie le type de document que l'on va créer (ici une image au format PNG
    
header ("Content-type: image/png");

    
// on dessine une image vide de 200 pixels sur 100
    
$image = @ImageCreate (200100) or die ("Erreur lors de la création de l'image");

    
// on applique à cette image une couleur de fond, les couleurs étant au format RVB, 
    // on aura donc ici une couleur rouge
    
$couleur_fond ImageColorAllocate ($image25500);

    
// on dessine notre image PNG
    
ImagePng ($image);
?>





Bonjour les BTS SIO

<?php
    
// on spécifie le type de document que l'on va créer (ici une image au format PNG
    
header ("Content-type: image/png");

    
// on dessine une image vide de 300 pixels sur 100
    
$image = @ImageCreate (300100) or die ("Erreur lors de la création de l'image");

    
// il semble que la première couleur définie est la couleur de fond de l'image.
    
$couleur_fond ImageColorAllocate ($image00255);    
    
$orange imagecolorallocate($image2551280);
    
$bleu imagecolorallocate($image00255);
    
$bleuclair imagecolorallocate($image156227254);
    
$noir imagecolorallocate($image000);
    
$blanc imagecolorallocate($image255255255);
    
imagestring($image43515"Bonjour les BTS SIO !"$blanc);
    
    
// on applique à cette image une couleur de fond, les couleurs étant au format RVB, 
    // on aura donc ici une couleur bleu
    
    // on dessine notre image PNG
    
ImagePng ($image);
?>




Documentation imagestring() :
  • imagestring().
    • imagestring($image, 4, 35, 20, "Bonjour les BTS SIO !", $blanc);
  • Le 4 est la taille des caractères de 1 à 5
  • 35 si on augmente va déplacer le texte vers la droite.
  • 20 hauteur si on augmente le texte va descendre.
  • $blanc --> Un identificateur de couleur créé avec imagecolorallocate().


Graphique

Remarque IMPORTANTE :
  • pour que le script trouve la police verdana, vous devrez placer la police verdana dans le répertoire fonts/

<?php
// on spécifie le type d'image que l'on va créer, ici ce sera une image au format PNG
header ("Content-type: image/png");

    
// on définit la largeur et la hauteur de notre image
    
$largeur 550;
    
$hauteur 300;

    
// on crée une ressource pour notre image qui aura comme largeur $largeur et $hauteur comme hauteur
    // (on place également un or die si la création se passait mal afin d'avoir un petit message d'alerte)
    
$im = @ImageCreate ($largeur$hauteur) or die ("Erreur lors de la création de l'image");

    
// on place tout d'abord la couleur blanche dans notre table des couleurs 
    // (je vous rappelle donc que le blanc sera notre couleur de fond pour cette image).
    
$blanc ImageColorAllocate ($im255255255);

    
// on place aussi le noir dans notre palette, ainsi qu'un bleu foncé et un bleu clair
    
$noir ImageColorAllocate ($im000);
    
$bleu_fonce ImageColorAllocate ($im75130195);
    
$bleu_clair ImageColorAllocate ($im95160240);

    
    
// on définit un tableau contenant le nombre de page vues par mois : par exemple, on suppose que 1500 pages du site ont été vues en janvier, 2450 en février, etc... Bien sur, pour que ce script soit vraiment valides, vous n'allez pas déclarer ce tableau, car sinon, les bâtons seront toujours les mêmes :) Vous allez plutôt effectuer une requête SQL sur votre base de données permettant de récupérer le nombre de pages vues de votre site par mois. Ensuite, il suffira d'appeler le script avec ces 12 paramètres dans votre page html 
    // (en faisant par exemple : <img src="./images/stats_year.php?visite_par_mois[1]=1500.......">)
    
$visite_par_mois[1]=1500;
    
$visite_par_mois[2]=2450;
    
$visite_par_mois[3]=800;
    
$visite_par_mois[4]=1780;
    
$visite_par_mois[5]=1900;
    
$visite_par_mois[6]=2450;
    
$visite_par_mois[7]=1684;
    
$visite_par_mois[8]=1845;
    
$visite_par_mois[9]=3450;
    
$visite_par_mois[10]=980;
    
$visite_par_mois[11]=1234;
    
$visite_par_mois[12]=500;

    
// on calcule le nombre de pages vues sur l'année
    
$max_visite max($visite_par_mois);


    
// on dessine un trait horizontal pour représenter l'axe du temps
    
ImageLine ($im20$hauteur-40$largeur-15$hauteur-40$noir);

    
    
// on affiche le numéro des 12 mois
    
for ($i=1$i<=12$i++) {
        if (
$i==1) {
        
ImageString ($im242$hauteur-38$i$noir);
        }
        else {
        
ImageString ($im2, ($i)*42$hauteur-38$i$noir);
        }
    }
    
    
    
// on dessine un trait vertical pour représenter le nombre de pages vues
    
ImageLine ($im203020$hauteur-40$noir);

    
    
// on affiche les legendes sur les deux axes ainsi que différents textes 
    // (note : pour que le script trouve la police verdana, 
    // vous devrez placer la police verdana dans un repertoire /fonts/)
    
imagettftext($im140$largeur-70$hauteur-10$noir"./fonts/verdana.ttf""Mois");
    
imagettftext($im1401020$noir"./fonts/verdana.ttf""Nb. de pages vues");
    
imagettftext($im140$largeur 30020$noir"./fonts/verdana.ttf""Statistiques pour l'année 2003");
    
    
    
// on parcourt les douze mois de l'année
    
for ($mois=1$mois <= 12$mois++) {
        if (
$visite_par_mois[$mois] != "0") {
        
// on calcule la hauteur du baton
        
$hauteurImageRectangle ceil(((($visite_par_mois[$mois])*($hauteur-50))/$max_visite));
        if (
$mois=="1") {
            
// si le mois est janvier, on affiche notre premier baton
            // on affiche le premier baton noir
            
ImageFilledRectangle ($im42$hauteur-$hauteurImageRectangle42+14$hauteur-41$noir);
            
// on affiche le second baton, bleu foncé, qui sera un peu plus petit que le noir afin de recouvrir une partie du noir
            
ImageFilledRectangle ($im44$hauteur-$hauteurImageRectangle+242+12$hauteur-41-1$bleu_fonce);
            
// on affiche le dernier baton, bleu clair, qui sera un peu plus petit que le bleu foncé afin de recouvrir une partie du bleu foncé (on obtiendra ainsi un effet de dégradé)
            
ImageFilledRectangle ($im48$hauteur-$hauteurImageRectangle+242+8$hauteur-41-1$bleu_clair);
        }
        else {
            
// si le mois est different de janvier, on affiche les autres batons
            
ImageFilledRectangle ($im, ($mois)*42$hauteur-$hauteurImageRectangle, ($mois)*42+14$hauteur-41$noir);
            
ImageFilledRectangle ($im, ($mois)*42+2$hauteur-$hauteurImageRectangle+2, ($mois)*42+12$hauteur-41-1$bleu_fonce);
            
ImageFilledRectangle ($im, ($mois)*42+6$hauteur-$hauteurImageRectangle+2, ($mois)*42+8$hauteur-41-1$bleu_clair);
        }
        }
    }

    
// on dessine le tout
    
Imagepng ($im);
    
?>





Pour terminer un joli dessin dont vous trouverez la source sur cette page.

Triangle



Pour plus d'informations consultez cette page sur le triangle de Sierpiński.

Documentation

Regardez la documentation générale --> https://www.php.net/manual/fr/book.image.php
La documentation pour tracer un trait --> la fonction imageline https://www.php.net/manual/fr/book.image.php

Développez.com - La manipulation d'images avec PHP : bibliothèque GD


https://www.lephpfacile.com/cours/22-la-librairie-gd
http://xandra.vip.free.fr/mesSITE/traitementimgphp/librairie_graphique/Utilisation%20de%20la%20librairie%20graphique.html

Vous pouvez rechercher le manuel d'une fonction en remplissant le cadre de recherche en haut à droite de la page du : "manuel de PHP"


Problème d'installation de GD
D'après cette page -> https://forum.raspberry-pi.fr/t/gd-graphic-library/8980/3
php -ver
sudo apt install php7.3-gd
ou
sudo apt install php7.4-gd



sudo apt install php-gd
sudo /etc/init.d/apache2 restart


Pour visualiser les erreurs en PHP
Aller dans /opt/lampp/etc
Dans le fichier php.ini
Modifier la ligne display_errors=Off par display_errors=On
N'oubliez pas de relancer xampp !!



Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]