Centrer un texte dans une image gd

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

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.