Centrer un texte dans une image gd

Soyez le premier à donner votre avis sur cette source.

Vue 17 788 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

coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
26 -
Salut
$fichierImage = imagecreatetruecolor(350, 400);
Il manque un or die...
cs_wizad
Messages postés
356
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
"Cherche pas à comprendre ! Moi j'ai compris ! Parce ce que je suis trop fort !! Capiche!!"

désolé mais j'ai des doutes sur l'aide apporté par ce genre de commentaires
glork
Messages postés
29
Date d'inscription
mardi 26 avril 2005
Statut
Membre
Dernière intervention
17 février 2006
-
<<<<<<<<<<"Cherche pas à comprendre ! Moi j'ai compris ! Parce ce que je suis trop fort !! Capiche!!"

désolé mais j'ai des doutes sur l'aide apporté par ce genre de commentaires>>>>>

je suis débutant mais d'apres mes connaissances si tu met pas or die(...); et ca marche pas ca génére un message d'erreur... :D
cs_GRenard
Messages postés
1663
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.
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

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.