L'objectif est d'obtenir par un moyen simple des fonds d'écrans à disposer sur les stations d'un réseau, comportant diverses informations, ainsi que le logo de l'entreprise et éventuellement d'autres informations, comme son site internet, ou des coordonnées de maintenance. Nous utiliserons php, qui peut faire un travail précis sur les images, via les fonctions de la librairie image GD: écriture de texte, redimensionnement, fusion, etc.

 

On utilise deux fichiers php ici: le premier, appelé make.php, sert à faire les transformations, le second, est un formulaire envoyant les données à make.php.

 


Explications sur GD

header ("Content-type: image/jpeg"); indispensable pour préciser qu'on génère une image php, et non pas du html par défaut.

@ImageCreate ($larg,$haut) on crée une image de hauteur et largeur donnée.

ImageColorAllocate ($imagefond, $rougefond, $vertfond, $bleufond); on remplit de couleur l'image précedente.

ImageTtfBBox($sizetext,0,$font,"Nom poste: $nomposte"); Rend un tableau contenant les coordonnées d'un rectangle donnant la taille réele du texte.

ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt, $couleurtxt, $font, "N° d'inventaire: $numinvent"); Ecrit du texte de la police, taille, et couleur voulue aux coordonnées précisées.

ImageCreateFromjpeg ($filelogo); Crée à partir d'un fichier image une image exploitable par GD dans php.

@imageCopyMerge ($imagefond, $imageinfos, $absbox, $ordbox, 0, 0, $largboxinfosx, $hautboxinfosy, 80); Fusionne dans la première image, la seconde, à abscisse et ordonnée voulue, de la taille voulue, à transparence de 80.

 


Premier modèle: image de fond de couleur unie

<?php

// Script by dupdup - www.dupdup.eu

// On précise qu'on génère une image jpeg
header ("Content-type: image/jpeg");
// Tableaux pour les menus déroulants
$trouge= array(0,52,255,0,120);
$tvert= array(94,127,255,0,120);
$tbleu= array(211,191,255,0,120);
$rh= array(1024,1280,1440,1680);
$rl= array(768,1024,900,1050);

// Variables à faire correspondre aux choix de la page précedente
$r=$_POST['arr']-1;
$rougefond= $trouge[$r];
$vertfond= $tvert[$r];
$bleufond= $tbleu[$r];

$d=$_POST['resol']-1;
$larg= $rh[$d];
$haut=$rl[$d];

$numinvent = $_POST['numinvent'];
$nomposte= $_POST['nomposte'];
$ip= $_POST['ip'];
$prise= $_POST['prise'];

// On crée le fond de l'image, puis on le remplit à la couleur définie
$imagefond = @ImageCreate ($larg,$haut) or die ("Erreur");
ImageColorAllocate ($imagefond, $rougefond, $vertfond, $bleufond);


// On s'occupe du premier box de texte, en précisant d'abord la police et la taille
$font = "../ttf/comic.ttf";
$sizetext = 16;

// On calcule la taille du carré selon le plus large des textes entre nom et numéro, on applique la fonction max pour prendre la plus grande des valeurs. La hauteur est fixée à 160
$sizemaxtxt =ImageTtfBBox($sizetext,0,$font,"Nom poste: $nomposte");
$sizemaxtxt2 =ImageTtfBBox($sizetext,0,$font,"N° d'inventaire: $numinvent");
$largboxinfosx = max(abs($sizemaxtxt[2]-$sizemaxtxt[0]),abs($sizemaxtxt2[2]-$sizemaxtxt2[0]))+15;
$hautboxinfosy = 160;

// On crée le carré aux dimensions calculées précédemment
$imageinfos = @ImageCreate ($largboxinfosx, $hautboxinfosy) or die ("Erreur");
$couleur_fond = ImageColorAllocate ($imageinfos, 250, 250, 250);
$couleurtxt = ImageColorAllocate($imageinfos,0,0,0);
$abstxt = 5;
$ordtxt = 30;

// On ajoute du texte dans la boite, à une abcisse de 5 et une ordonée du premier de 30, ensuite séparation verticale de 40
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt, $couleurtxt, $font, "N° d'inventaire: $numinvent");
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt+40, $couleurtxt, $font, "Nom poste: $nomposte");
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt+80, $couleurtxt, $font, "Adresse IP: $ip");
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt+120, $couleurtxt, $font, "Prise réseau: $prise");


// On fusionne le fond et le carré de texte, on place le texte à 100 et 130 en bas à droite (adapté pour les bureaux Windows et Linux)
$absbox=$larg - $largboxinfosx - 100;
$ordbox=$haut - $hautboxinfosy - 130;
@imageCopyMerge ($imagefond, $imageinfos, $absbox, $ordbox, 0, 0, $largboxinfosx, $hautboxinfosy, 80);  



// on calcule la largeur et la hauteur du logo, puis on fusionne le logo avec le résultat précedent, à 130 en bas à gauche

$filelogo = "../logo/logobleu2.jpg";  
$imagelogo = ImageCreateFromjpeg ($filelogo);
$larglogo = imagesx ($imagelogo);  
$hautlogo = imagesy ($imagelogo);     
$abslogo=150;
$ordlogo=$haut-$hautlogo-130;

@imageCopyMerge ($imagefond, $imagelogo, $abslogo, $ordlogo, 0, 0, $larglogo, $hautlogo, 100);


//Et on fait l'image:
Imagejpeg ($imagefond);  
    ?>


Le formulaire utilisé est celui-ci:

<form action="./make.php" method="post">
 
Résolution:

<select name="resol">
            <option value="1">15&quot; - 1024*768</option>
            <option value="2">17&quot; ou 19&quot; - 1280*1024</option>
            <option value="3">19&quot;W - 1440*900</option>
            <option value="4">22&quot;W - 1680*1050</option>
 </select>
       

 Couleur de fond:

<select name="arr">
            <option value="1">Windows XP</option>
            <option value="2">Windows 2000</option>
            <option value="3">Blanc</option>
            <option value="4">Noir</option>
            <option value="5">Gris</option>        
   </select>
       

Num&eacute;ro d'inventaire:

<input type="text" name="numinvent">
       

Nom du poste:

<input type="text" name="nomposte">

Adresse IP:

<input type="text" name="ip">

Prise r&eacute;seau:

<input type="text" name="prise">

<input type="submit" value="Génerer">
 

Libre à vous de personnaliser celui-ci, notamment pour les couleurs. Je donne celui-ci à titre d'exemple.

 

 


Second modèle: fond à partir d'une photo

 

L'idée reste identique, on va cette fois au lieu de fabriquer une image aux dimensions définies utiliser une image existante. Il faudra faire attention à ses dimensions pour éviter de superposer textes et logos, ou bien de voir ceux-ci coupés par le système d'exploitation. Plus la taille de l'image sera proche de la résolution de l'écran, meilleur sera le résultat. Ce second script demandera bien sur un temps d'éxécution plus important.

 

<?php

// Script by dupdup - www.dupdup.eu

// On précise qu'on fabrique une image jpg
header ("Content-type: image/jpeg");

// Reprise des informations
$numinvent = $_POST['numinvent'];
$nomposte= $_POST['nomposte'];
$ip= $_POST['ip'];
$prise= $_POST['prise'];

// On transforme l'image de fond, et on sort ses dimensions
$filefond = $_POST['urlfond'];  
$imagefond = ImageCreateFromjpeg ($filefond);
$larg = imagesx ($imagefond);  
$haut = imagesy ($imagefond);

// On s'occupe du premier box de texte
$font = "../ttf/comic.ttf";
$sizetext = 16;

// On calcule la taille du carré selon le plus large des textes
$sizemaxtxt =ImageTtfBBox($sizetext,0,$font,"Nom poste: $nomposte");
$sizemaxtxt2 =ImageTtfBBox($sizetext,0,$font,"N° d'inventaire: $numinvent");
$largboxinfosx = max(abs($sizemaxtxt[2]-$sizemaxtxt[0]),abs($sizemaxtxt2[2]-$sizemaxtxt2[0]))+15;
$hautboxinfosy = 160;

// On crée le carré de la largeur calculée
$imageinfos = @ImageCreate ($largboxinfosx, $hautboxinfosy) or die ("Erreur");
$couleur_fond = ImageColorAllocate ($imageinfos, 250, 250, 250);
$couleurtxt = ImageColorAllocate($imageinfos,0,0,0);
$abstxt = 5;
$ordtxt = 30;

// On ajoute du texte dans la boite, à une abcisse de 5 et une ordonée du premier de 30, ensuite séparation verticale de 40
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt, $couleurtxt, $font, "N° d'inventaire: $numinvent");
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt+40, $couleurtxt, $font, "Nom poste: $nomposte");
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt+80, $couleurtxt, $font, "Adresse IP: $ip");
ImageTtfText($imageinfos, $sizetext, 0, $abstxt, $ordtxt+120, $couleurtxt, $font, "Prise réseau: $prise");


// On fusionne le fond et le carré de texte, on place le texte à 100 et 130 en bas à droite
$absbox=$larg - $largboxinfosx - 100;
$ordbox=$haut - $hautboxinfosy - 130;
@imageCopyMerge ($imagefond, $imageinfos, $absbox, $ordbox, 0, 0, $largboxinfosx, $hautboxinfosy, 80);  
     

 
// on calcule la largeur et la hauteur du logo, puis on fusionne le logo avec le résultat précedent, à 130 en bas à gauche
$filelogo = "../logo/logobleu2.jpg";  
$imagelogo = ImageCreateFromjpeg ($filelogo);
$larglogo = imagesx ($imagelogo);  
$hautlogo = imagesy ($imagelogo);     
$abslogo=150;
$ordlogo=$haut-$hautlogo-130;

@imageCopyMerge ($imagefond, $imagelogo, $abslogo, $ordlogo, 0, 0, $larglogo, $hautlogo, 100);


//Et on fait l'image:
Imagejpeg ($imagefond);  
    ?>

 

Et le formulaire, donné encore à titre d'exemple est simplifié:

<form action="./make.php" method="post">


Url image de fond:

<input type="text" name="urlfond">

Num&eacute;ro d'inventaire:

<input type="text" name="numinvent">

Nom du poste:

<input type="text" name="nomposte">

Adresse IP:

<input type="text" name="ip">

Prise r&eacute;seau:

<input type="text" name="prise">

<input type="submit" value="G&eacute;nerer">