lundi 1 Sep 2008

Écrire un texte sur une image

Voici la suite du tutoriel pour faire du texte en image. :-) Pour comprendre ceci, vous devez avoir lu les bases sur les images en PHP avec GD2.

Informatique et tutoriels PHP

Les images en PHP avec GD2 - Partie 2 mettre du texte sur l'image


Le texte

La fonction de base pour ajouter un texte est imagestring qui s'utilise avec imageloadfont pour indiquer la police d'écriture. Mais l'utilisation de ces fonctions est moins simple et moins portable que imagettftext qui permet de charger une police au format TTF. Je ne vais donc parler que de cette dernière.
imagettftext (resource $image, float $taille, float $angle, int $x, int $y, int $couleur, string $fichier_ttf, string $texte)

$taille est la taille d'écriture en points, $angle est l'angle en degré, $fichier_ttf est le fichier de police à utiliser. Il suffit donc de placer cette police avec le reste du site pour voir son script fonctionner sur n'importe quel serveur. :-)

Voilà, nous avons maintenant tous les éléments pour faire le texte dans une image vide. Je vais tout mettre en paramètre, comme ça vous pourrez vous amuser. Voilà le code HTML qui insère mon image:
<img src="http://azur-dev.kizone.net/images/azurdev/texte-image.php?l=350&h=100&texte1=azur-dev.kizone.net&texte2=Ce texte est modifiable!&couleur1=FFFFFF&couleur2=AADD44&couleur_fond=1F1F1F" alt="texte en image" />

Ce qui donne:

texte en image

Voilà le lien vers l'image, essayez de modifier le texte et les couleurs, vous verrez tout de suite le coté pratique pour des titres de sites en images.

:!: Gardez bien sûr à l'esprit que ce texte ne sera pas référencé comme un titre, mais comme une image! On ne peut pas tout avoir.

Et voilà enfin, le code PHP qui génère cette petite merveille. :-D


<?php
/**
 * Texte en image - azur-dev.kizone.net
 * Les variables passer sont: l h texte1 texte2 couleur_texte1 couleur_texte2 couleur_fond
 */
 
header ('Content-type: image/png');
 
$im = imagecreate ($_GET['l'], $_GET['h']);
// ou $im = imagecreatetruecolor ($_GET['l'], $_GET['h']);
 
$couleur_fond = imagecolorallocate ($im,
   hexdec(substr($_GET['couleur_fond'], 0, 2)),
   hexdec(substr($_GET['couleur_fond'], 2, 2)),
   hexdec(substr($_GET['couleur_fond'], 4, 2)));
 
// et si on choisit imagecreatetruecolor, rajouter le fond avec:
// imagefilledrectangle($im, 0, 0, $_GET['l'], $_GET['h'], $couleur_fond);
 
$couleur1 = imagecolorallocate ($im,
   hexdec(substr($_GET['couleur1'], 0, 2)),
   hexdec(substr($_GET['couleur1'], 2, 2)),
   hexdec(substr($_GET['couleur1'], 4, 2)));
$couleur2 = imagecolorallocate ($im,
   hexdec(substr($_GET['couleur2'], 0, 2)),
   hexdec(substr($_GET['couleur2'], 2, 2)),
   hexdec(substr($_GET['couleur2'], 4, 2)));
 
imagettftext ($im, 18, 10, 30, 45, $couleur1, './desyrel.ttf', stripslashes ($_GET['texte1']));
imagettftext ($im, 24, 0, 15, 65, $couleur2, './desyrel.ttf', stripslashes ($_GET['texte2']));
// Il faut enlever stripslashes si magic_quotes est désactivé.
 
imagepng($im);
imagedestroy($im);
 
?>

Il faudra bien sûr mettre le fichier .ttf avec le fichier .php. ;-)

Pour finir je vous rappelle que les textes et codes de ce site sont protégés par le droit d'auteur. Le but est que vous appreniez et non copiez-collez mon code PHP.

texte en image

À l'occasion je continuerai avec le dessin de formes et la modification d'images ou photos existantes. Je ferai aussi la gestion des erreurs qui manque dans cet exemple. ;-)


café Cet article vous a aidé? 
Offrez-moi un café!
Agrégateur informatique

2 réponses à “Écrire un texte sur une image”

  1. 1
    Did (hdr.kizone.net) (hdr.kizone.net) a dit:

    C'est bien utile et permet d'utiliser n'importe quelle police. Il faudrait que je fasse ça en automatique pour marquer mes photos. ;-)

  2. Rétrolien de mysql by infogere - Pearltrees

Laisser un commentaire

Azur Dev