geek space web solutions

Gérer les polices avec la bibliothèque GD

Mercredi, 20 Avril 2011 17:41
police ttf
La bibliothèque GD permet de générer des images dynamiquement en PHP. Je détaille dans cet article quelles fonctions j'utilise pour écrire un texte dans une image, en gérant la taille de police et son positionnement.

Avant toute chose, vérifiez que la bibliothèque GD est installée sur votre serveur, pour savoir cela, vous pouvez faire un phpinfo(), (vous pouvez créer un petit fichier PHP contenant un appel à la fonction phpinfo() ), vous devez trouver quelque chose comme GD Support : Enabled
(Depuis la version 2.0, le format GIF n'est plus supporté, il a été remplacé par le format PNG...)


Naturellement, j'ai d'abord cherché à utiliser la fonction imagestring mais elle ne permet (apparemment) pas de gérer la taille de la police, je me suis donc tourné vers la fonction imagettftext.
Avant d'utiliser cette fonction, vous pouvez faire appel à la fonction imageftbbox pour calculer la largeur exacte du texte avec la taille de police définie.

En résumé, je propose ci-dessous un extrait de script qui permet : à la fois de gérer la taille de police et de positionner au mieux le texte (le centrer dans cet exemple) en calculant au préalable sa largeur (width) :
// INFO : Convert color from hex in XXXXXX (eg. FFFFFF, 000000, FF0000) to array(R, G, B) / fonction détaillée plus bas dans le script
$array_color_titre = rgb2array($color_titre);

// INFO : imagecolorallocate : Retourne un identifiant de couleur, représentant la couleur composée avec les couleurs RGB.
$ref_couleur_titre = imagecolorallocate($cropped_image, $array_color_titre[0], $array_color_titre[1], $array_color_titre[2]);

// La fonction ci-dessous ne permet apparement pas de gérer la taille de police... Ni de gérer le centrage...
// INFO bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )
//imagestring($cropped_image, 5, $largeur_bordure, $cropHeight+$largeur_bordure, $texte_titre, $ref_couleur_titre);

// On définit la police
$filename_font = "GenR102.TTF";

// On définit la taille de police
$font_size = 20;

// On calcule la largeur du Texte
// INFO : array imageftbbox ( float $size , float $angle , string $fontfile , string $text [, array $extrainfo ] )
$array_positions = imageftbbox( $font_size, 0, $filename_font, $texte_titre);
$spacepx = $array_positions[4] - $array_positions[0];

// On écrit le Texte au centre grâce à la variable $spacepx calculée ci-dessus
// INFO : array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text );
imagettftext($cropped_image, $font_size, 0, $largeur_bordure+$cropWidth/2-$spacepx/2, $cropHeight+$largeur_bordure+$largeur_bordure/2, $ref_couleur_titre, $filename_font, $texte_titre);


/**
* Convert color from hex in XXXXXX (eg. FFFFFF, 000000, FF0000) to array(R, G, B)
* of integers (0-255).
*/
function rgb2array($rgb) {
return array(
base_convert(substr($rgb, 0, 2), 16, 10),
base_convert(substr($rgb, 2, 2), 16, 10),
base_convert(substr($rgb, 4, 2), 16, 10),
);
}


// generate cropped image
ob_start();
imagejpeg($cropped_image, NULL, $imageQuality);
$contents = ob_get_contents();
ob_end_clean();

// Nom final de la nouvelle image
$saveAs = $process_dir . $fileName;

// On écrit la nouvelle image
$file = fopen($saveAs, "w");
fwrite($file, $contents);
fclose($file);
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Sections

Éditeur de fichier XML en ligne


"XML Manager" est un éditeur sécurisé permettant d'administrer en ligne un fichier XML.
Il fournit des fonctions avancées de recadrage et de redimensionnement des images...

Sondages

Pensez-vous que le HTML5 puisse complètement remplacer Flash ?
 
Seriez-vous intéressé par un éditeur d'XML en ligne ?
 

Paypal

paypal

Code du plugin Joomla AutoSEO 1.2 par www.geek-space.fr