Taggueur d'image

Contenu du snippet

Cette fonction applique un tag sur une image et enregistre l'image ainsi obtenue.

Necessite la librairie GD2

Source / Exemple :


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é !

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.