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
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|