Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TAGGUEUR D'IMAGE


Information sur la source

Catégorie :Graphique Niveau : Initié Date de création : 05/12/2004 Date de mise à jour : 07/12/2004 18:51:30 Vu : 4 555

Note :
8 / 10 - par 5 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Cette fonction applique un tag sur une image et enregistre l'image ainsi obtenue.

Necessite la librairie GD2
 

Source

  • function tag($imgSource,$imgTag,$destination,$X,$Y,$largeur,$hauteur,$distance) {
  • //doImage génére un fichier de sorti en fonction du type de ficheir demandé par l'utilisateur
  • function doImage($img,$destination) {
  • if( strpos($destination,"png") ) imagePng($img,$destination) ;
  • elseif( strpos($destination,"jpg") ) imageJpeg($img,$destination) ;
  • else imagePng($img) ;
  • }
  • //Récupère les info sur les images utilisées
  • $sourceSize = getimagesize($imgSource);
  • $sourceWidth = $sourceSize[0];
  • $sourceHeight = $sourceSize[1];
  • @$tagSize = getimagesize($imgTag); //Les @ servent à éviter un message d'erreur si le tag est une chaine de caractère
  • @$tagWidth = $tagSize[0];
  • @$tagHeight = $tagSize[1];
  • //Crée l'image et sélectionne l'image source et le tag
  • $img = ImageCreateTrueColor($sourceWidth,$sourceHeight);
  • $source = imageCreateFromJpeg($imgSource);
  • //Si le tag est une chaine de caractère
  • if( strpos($imgTag,":") ) {
  • $fontHeight = imageFontHeight(5); $fontWidth = imageFontWidth(5);
  • list( $texte , $color ) = explode(":",$imgTag) ;
  • //Si elle doit être affiché sur plusieurs lignes
  • if( strpos($texte,"<br>")) {
  • $temptexte = $texte;
  • $nbrlign = 0; $maxpos = 0;
  • while( $pos = strpos($temptexte,"<br>") ) {
  • if( $pos > $maxpos ) $maxpos = $pos ;
  • $ligntexte[] = substr($temptexte,0,$pos);
  • $temptexte = substr($temptexte,$pos+4);
  • $nbrlign ++;
  • }
  • $ligntexte[] = $temptexte;
  • $largeur = $tagWidth = $fontWidth * $maxpos;
  • $hauteur = $tagHeight = $fontHeight * ($nbrlign+1) ;
  • //Si une seule ligne suffit
  • } else {
  • $largeur = $tagWidth = $fontWidth * strlen($texte) ;
  • $hauteur = $tagHeight = $fontHeight * count($texte);
  • }
  • //Création de l'image tag avec dedans le texte
  • list( $red , $green , $blue ) = explode("|",$color) ;
  • $tag = imageCreateTrueColor($tagWidth,$tagHeight);
  • $col = imageColorAllocate($tag,$red,$green,$blue);
  • $coltransp = imageColorAllocate($tag,0,0,0);
  • $transp = imageColorTransparent($tag,$coltransp);
  • imageFill($tag,0,0,$coltransp);
  • if(isset($ligntexte)) {
  • for($x=0;$x<count($ligntexte);$x++) {
  • $abscisse = $fontWidth * ( ( $maxpos / 2 ) - ( strlen($ligntexte[$x] ) / 2 ) );
  • imageString($tag,5,$abscisse,$fontHeight*($x),$ligntexte[$x],$col);
  • }
  • } else imageString($tag,5,0,0,$texte,$col);
  • $stringType = TRUE;
  • }
  • //Si c'est une image png ou jpg
  • elseif( strpos($imgTag,".jpg") ) $tag = imageCreateFromJpeg($imgTag);
  • elseif( strpos($imgTag,".png")) $tag = imageCreateFromPng($imgTag);
  • //Donne ou calcule des données par défault si elles n'ont pas été précisées
  • if( isset($largeur) && empty($hauteur) ) {
  • @$hauteur = ( $tagHeight / $tagWidth ) * $largeur ;
  • }
  • elseif( isset($hauteur) && empty($largeur) ) {
  • $largeur = ( $tagWidth / $tagHeight ) * $hauteur ;
  • }
  • if( empty($distance) ) $distance = 10 ;
  • $largeur = empty($largeur) ? $tagWidth : $largeur ;
  • $hauteur = empty($hauteur) ? $tagHeight : $hauteur ;
  • //Si la taille du tag est définie comme un pourcentage, calcul de la taille du tag
  • if( is_string($largeur) ) { $largeur = ( $tagWidth / 100 ) * $largeur ; $largeur = ( int ) $largeur ; }
  • if( is_string($hauteur) ) { $hauteur = ( $tagHeight / 100 ) * $hauteur ; $hauteur = ( int ) $hauteur ; }
  • //Donne la position du tag s'il a été définie par sa position sur l'image
  • switch($Y) {
  • case "up" :
  • $Y = $distance ; break ;
  • case "down" :
  • $Y = $sourceHeight - $hauteur - $distance ; break ;
  • case "middle" :
  • $Y = ( $sourceHeight / 2 ) - ( $hauteur / 2 ) ; break ;
  • }
  • switch($X) {
  • case "left" :
  • $X = $distance ; break;
  • case "right" :
  • $X = $sourceWidth - $largeur - $distance ; break ;
  • case "middle" :
  • $X = ( $sourceWidth / 2 ) - ( $largeur / 2 ) ; break ;
  • }
  • //Donne la position du tag s'il a été définie par un pourcentage de l'image
  • if( is_string( $X ) ) { $X = ( $sourceWidth / 100 ) * $X ; $X = ( int ) $X ; }
  • if( is_string( $Y ) ) { $Y = ( $sourceHeight / 100 ) * $Y ; $Y = ( int ) $Y ; }
  • //Dessine l'image
  • imageCopy($img,$source,0,0,0,0,$sourceWidth,$sourceHeight) or die("Problème avec la copie de l'image source");
  • if( isset($stringType) ) imagecopymerge($img,$tag,$X,$Y,0,0,$tagWidth,$tagHeight,100);
  • else imageCopyResampled($img,$tag,$X,$Y,0,0,$largeur,$hauteur,$tagWidth,$tagHeight) or die("Problème avec l'insertion du tag");
  • //Enregistrement de l'image
  • doImage($img,$destination);
  • return $destination;
  • }
  • ?>
function tag($imgSource,$imgTag,$destination,$X,$Y,$largeur,$hauteur,$distance) {
    //doImage génére un fichier de sorti en fonction du type de ficheir demandé par l'utilisateur
        function doImage($img,$destination) {
                if( strpos($destination,"png") ) imagePng($img,$destination) ;
                elseif( strpos($destination,"jpg") ) imageJpeg($img,$destination) ;
                else imagePng($img) ;
        }
    //Récupère les info sur les images utilisées
        $sourceSize = getimagesize($imgSource);
        $sourceWidth = $sourceSize[0];
        $sourceHeight = $sourceSize[1];
        @$tagSize = getimagesize($imgTag); //Les @ servent à éviter un message d'erreur si le tag est une chaine de caractère
        @$tagWidth = $tagSize[0];
        @$tagHeight = $tagSize[1];

    //Crée l'image et sélectionne l'image source et le tag
        $img = ImageCreateTrueColor($sourceWidth,$sourceHeight);
        $source = imageCreateFromJpeg($imgSource);

      //Si le tag est une chaine de caractère
        if( strpos($imgTag,":") ) {
             $fontHeight = imageFontHeight(5);  $fontWidth = imageFontWidth(5);
             list( $texte , $color ) = explode(":",$imgTag) ;
           //Si elle doit être affiché sur plusieurs lignes
             if( strpos($texte,"<br>")) {
                 $temptexte = $texte;
                 $nbrlign = 0; $maxpos = 0;
                 while( $pos = strpos($temptexte,"<br>") ) {
                     if( $pos > $maxpos ) $maxpos = $pos ;
                     $ligntexte[] = substr($temptexte,0,$pos);
                     $temptexte = substr($temptexte,$pos+4);
                     $nbrlign ++;
                   }
                 $ligntexte[] = $temptexte;
                 $largeur = $tagWidth = $fontWidth * $maxpos;
                 $hauteur = $tagHeight = $fontHeight * ($nbrlign+1) ;
          //Si une seule ligne suffit
              } else {
                 $largeur = $tagWidth = $fontWidth * strlen($texte) ;
                 $hauteur = $tagHeight = $fontHeight * count($texte);
              }
        //Création de l'image tag avec dedans le texte
             list( $red , $green , $blue ) = explode("|",$color) ;
             $tag = imageCreateTrueColor($tagWidth,$tagHeight);
             $col = imageColorAllocate($tag,$red,$green,$blue);
             $coltransp = imageColorAllocate($tag,0,0,0);
             $transp = imageColorTransparent($tag,$coltransp);
             imageFill($tag,0,0,$coltransp);
             if(isset($ligntexte)) {
                for($x=0;$x<count($ligntexte);$x++) {
                     $abscisse = $fontWidth * ( ( $maxpos / 2 ) - ( strlen($ligntexte[$x] ) / 2 ) );
                     imageString($tag,5,$abscisse,$fontHeight*($x),$ligntexte[$x],$col);
                     }
             } else imageString($tag,5,0,0,$texte,$col);
             $stringType = TRUE;
           }
      //Si c'est une image png ou jpg
        elseif( strpos($imgTag,".jpg") ) $tag = imageCreateFromJpeg($imgTag);
        elseif( strpos($imgTag,".png")) $tag = imageCreateFromPng($imgTag);

    //Donne ou calcule des données par défault si elles n'ont pas été précisées
        if( isset($largeur) && empty($hauteur) ) {
                @$hauteur = ( $tagHeight / $tagWidth ) * $largeur ;
                }
        elseif( isset($hauteur) && empty($largeur) ) {
                $largeur = ( $tagWidth / $tagHeight ) * $hauteur ;
                }
        if( empty($distance) ) $distance = 10 ;
        $largeur = empty($largeur) ? $tagWidth : $largeur ;
        $hauteur = empty($hauteur) ? $tagHeight : $hauteur ;

    //Si la taille du tag est définie comme un pourcentage, calcul de la taille du tag
        if( is_string($largeur) ) { $largeur = ( $tagWidth / 100 ) * $largeur ;  $largeur = ( int ) $largeur ; }
        if( is_string($hauteur) ) { $hauteur = ( $tagHeight / 100 ) * $hauteur ; $hauteur = ( int ) $hauteur ; }

    //Donne la position du tag s'il a été définie par sa position sur l'image
        switch($Y) {
                case "up" :
                       $Y = $distance ; break ;
                case "down" :
                       $Y = $sourceHeight - $hauteur - $distance ; break ;
                case "middle" :
                       $Y = ( $sourceHeight / 2 ) - ( $hauteur / 2 ) ; break ;
                }

        switch($X) {
                case "left" :
                      $X = $distance ; break;
                case "right" :
                      $X = $sourceWidth - $largeur - $distance ; break ;
                case "middle" :
                      $X = ( $sourceWidth / 2 ) - ( $largeur / 2 ) ; break ;
                }

    //Donne la position du tag s'il a été définie par un pourcentage de l'image
      if( is_string( $X ) ) { $X = ( $sourceWidth / 100 ) * $X ; $X = ( int ) $X ; }
      if( is_string( $Y ) ) { $Y = ( $sourceHeight / 100 ) * $Y ; $Y = ( int ) $Y ; }

    //Dessine l'image
        imageCopy($img,$source,0,0,0,0,$sourceWidth,$sourceHeight) or die("Problème avec la copie de l'image source");
        if( isset($stringType) ) imagecopymerge($img,$tag,$X,$Y,0,0,$tagWidth,$tagHeight,100);
        else imageCopyResampled($img,$tag,$X,$Y,0,0,$largeur,$hauteur,$tagWidth,$tagHeight) or die("Problème avec l'insertion du tag");

   //Enregistrement de l'image
        doImage($img,$destination);

        return $destination;
        }

?>

Conclusion

Les paramètres de la fonction sont :
- imgSource : OBLIGATOIRE chemin de l'image à tagger
- imgTag : OBLIGATOIRE
      - S'il s'agit d'un chemin, ce sera celui de l'image servant de tag
      - S'il s'agit d'une chaîne de caractère de la forme "votre texte:rouge|vert|bleu", "votre texte" sera tagé sur l'image avec une couleur définie par les proportions de rouge, vert et bleu. On peu la tagger sur plusieurs lignes en utilisant la balise <br>
- destination : OBLIGATOIRE chemin de l'image qui sera créé
- X : OBLIGATOIRE
      - Si c'est un nombre : abscisse du coin supérieur gauche du tag dans l'image
      - Peut prendre comme valeur "left" ou "right" et le tag sera dans un coin gauche ou droit de l'image
      - Peut prendre comme valeur middle et le tag sera centré
      - Si c'est un nombre définie comme une chaîne de caractère ( entre guillemet ) : l'image est positionné à un pourcentage de l'image égal au nombre entre guillemet ( EX : $X = "50" positionnera le tag au milieu de l'image )
- Y : OBLIGATOIRE
      - Idem que X sauf qu'il s'agit de l'ordonnée du coin supérieur gauche du tag
      - Les valeurs pour définir une image dans un coin sont "up" et "down"
- largeur et hauteur : OPTIONNEL
      - S'il ne sont pas précisés : le tag n'est pas redimmensionné avant d'être inséré dans l'image
      - Si ce sont des nombres : largeur et hauteur du tag dans l'image
      - Si ce sont des nombres définies comme des chaîne de caractère ( entre guillemet ) : l'image est redimmensionnée en prenant la valeur dans lachaîne comme pourcentage ( EX : $largeur = "50" donnera au tag une largeur équivalente à 50% de la largeur de l'image d'origine )
      - Si un seul des deux est précisé, le script donne à l'autre la valeur nécéssaire pour que le tag ne soit pasdéformé
- distance : OPTIONNEL
      - Dans le cas d'un X ou Y définie par une chaine de caractère ( up down left ou right ), distance du tag par rapport au bord de l'image

Si vous ne souhaitez pas définir les paramètres optionnels , remplacez les par NULL dans l'appel de la fonction

La fonction retourne le chemin vers l'image créée.

Laissez des commentaires sur ce qui peut être amélioré !
 

Historique

07 décembre 2004 18:51:30 :
Ajout d'une possibilité de tagger un texte plutôt qu'une image. Ajout des positions "middle" pour $X et $Y. Ajout d'une possibilité de donner $X et $Y en pourcentage

Commentaires et avis

signaler à un administrateur
Commentaire de pyrana13 le 23/03/2005 22:20:24

petit bog lorsqu'on utilise plusieur fois cette fonction, a cause d'une fonction dans une fonction ;
function doImage($img,$destination)

pour réglé le problème j'ai enlever cette fonction et copier le code quand on l'appelle (doImage($img,$destination);)

signaler à un administrateur
Commentaire de djcal007 le 28/07/2005 16:37:30

on va testé ça sinon top cool

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,187 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.