Centrer un texte dans une image gd

Soyez le premier à donner votre avis sur cette source.

Vue 17 898 fois - Téléchargée 593 fois

Description

Avec la librairie GD2 de PHP, il est possible de générer des images ... Mais en ce qui concerne les textes et surtout comment les centrer : c'est une autre histoire !! Voici un script PHP qui permet de :
1/ Générer une image
2/ Dessiner un rectangle rouge
3/ Insérer des textes écrits en noir et centrer sur leurs lignes

Source / Exemple :


<?php
// Création de l'image
$fichierImage = imagecreatetruecolor(350, 400) or die("L'image n'a pas été générée ! Désolé");

// Texte à afficher
$policeTitre = 4; // La plus grande police
$police = 2; // La plus petite police

// Fonction pour déterminer le centrage de la chaine de caractères (elle prend comme paramètre : la chaine et la police d'écriture
function centrage_texte($z,$y)
	{
		// Je calcule le nombre de caractères dans la chaine
		$a = strlen($z);
		// Je calcule la taille d'un caractère par rapport à la taille de la police
		$b = imagefontwidth($y);
		// Je calcule la taille de ma chaine de caractères		
		$c = $a*$b;
		// Je calcule combien il me reste de caractères/espace sur les côtés pour centrer mon texte
		$d = 350-$c;
		// Je recherche l'emplacement où débutera ma chaine de caractères
		$e = $d/2;	
		// La chaine commencera ... à cet emplacement	
		return $e;		
	}
	
// Couleurs
$couleurFond = imagecolorallocate($fichierImage,255,0,0); // C'est du rouge !
$couleurTexte = imagecolorallocate($fichierImage,0,0,0 ); // C'est du noir !

// Création d'un rectangle
imagefilledrectangle($fichierImage, 0, 0,350,400,$couleurFond);

// Textes à centrer
$texte1 = "TITRE";
$texte2 = "Je suis un texte centré";

// Insertion des textes + utilisation de la fonction pour centrer
imagestring($fichierImage,$policeTitre,centrage_texte($texte1,$policeTitre),10,$texte1,$couleurTexte);
imagestring($fichierImage,$police,centrage_texte($texte2,$police),100,$texte2,$couleurTexte);	
	
// Type de l'image
header("Content-type: image/jpeg");

// Expédition de l'image au navigateur
imagejpeg($fichierImage);

// Destruction de l'image
imagedestroy($fichierImage);

/* Les commentaires ont été mis à jour + ajout de l'utilisation de la fonction die() de PHP */	
?>

Conclusion :


Ce script est inspiré des différentes recommandations et conseils que j'ai pu lire sur des sites et forums PHP ... Il n'utilise pas la fonction "imageftbbox" de PHP car trop complexe (à mon avis) à mettre en oeuvre juste pour centrer des textes ! Il fonctionne pour toutes les longueurs de textes (mais il ne faut pas que la chaine de caractères dépassé en taille la largueur de l'image JPG générée) ...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

sylvain09
Messages postés
34
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
10 mars 2007
-
piranhaworld => des i ou des m, la taille est la même avec GD.... enfin il me semble :)

Pour ma part merci beaucoup pour cette source, j'ai utilisé la fonction pour aligner mon texte à droite
piranhaworld
Messages postés
12
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
9 juillet 2007
-
c'est un peu bidon comme centrage dans la mesure ou ton texte est à chasse fixe..
essaye de nous centrer un Arial
en faisant des petits tests avec "iiiiiiiiii" et "mmmmmmmmmm" (10 caractères à chaque fois et pourtant bien différent en largeur. Donc impossible à centrer avec ton programme)
cs_GRenard
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
Je ne suis pas étonné qu'il manque un or die...
le or die est seulement pour faire planter ton script si GD n'est pas installé... plutôt que de sortir d'autres sortes de warning...
Mais bon ce n'est pas bien grave
Moi par exemple, dans mon installateur (je prépare un prog open source)
Je fais une vérification si gd existe mais après, je ne la fais plus lors de l'exécution.
Si je copiais un code de mon programme ici, il n'y aurait pas de or die... Donc c'est correct si tu ne le mets pas, mais c'est correct de le mentionner aux autres.
Zeo34
Messages postés
7
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
10 janvier 2009
-
Bonjour,
Je vais vous répondre ...
1) Pour les commentaires, j'en ai mis pour ceux qui prendront ce script pour qu'ils comprennent comment j'ai programmé (j'enlève les commentaires lorsque le script est prêt à être utilisé!). Quand j'ai commencé le PHP, je trouvais des scripts mais il manquait des commentaires ou de la documentation en rapport (je prends le temps de commenter mes scripts pour que des débutants puissent comprendre : "on a tous été un débutant, un jour!")
2) En ce qui concerne la fonction die() de PHP, vous allez être étonnés mais ce script fonctionne sans ... !!
3) Pour la qualité de mes commentaires, ce script fait parti d'un produit que je développe pour mon entreprise, il contient des commentaires pour les autres développeurs ("// C'est moi la plus grande police ! Nananère !! " et "// Cherche pas à comprendre ! Moi j'ai compris ! Parce ce que je suis trop fort !! Capiche!!
" >> mon chef aime bien ce genre de commentaires et il en ajoute lui aussi : on communique entre nous par les commentaires!)

Cordialement,
Zeo
cs_GRenard
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
Il y a peut-être trop de commentaire ;)
Moi des commentaires de la sorte j'appelle ca des easter egg de commentaire ;) par contre, il ne faut pas en abuser...
Ce qui serait bien, serait une fonction qui prend en paramètre l'image et qu'elle utiliser imagesx() plutôt que de hardcoder 350 comme tu le fais.

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.