|
Trouver une ressource
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
Description
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
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
|