Accueil > > > TAGGUEUR D'IMAGE
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
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
HTML VERS PDFHTML VERS PDF par spike911
Cliquez pour lire la suite par spike911
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|