Version complète: sur le forum Webmaster Hub : Alignement à droite d'un texte dans une image
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Poppy
Bonjour,

Je cherche à aligner un texte dans une image générée en PHP.

Or, je n'ai pas réussi à m'aider. Pouvez-vous m'orienter ?

Merci d'avance ^_^
Portekoi
Bonjour,

Je ne m'en souviens plus trop mais regarde sur ce site :

http://www.phpdebutant.org/article111.php

Je pense que tu peux le faire en spécifiant des "coordonnées" smile.gif


Portekoi
captain_torche
A ma connaissance, ce n'est pas possible: il semble qu'il n'existe pas de fonction de GD, décrivant un bloc de texte avec un paramètre d'alignement.
xpatval
Ceci peut-il t'aider ?

CODE
<?php
class insert_text_to_image
{
function insert_text_to_image($imageSource, $text, $x_position, $y_position, $colorR, $colorG, $colorB, $font)
{
$this->source=$imageSource;
$this->text=$text;
$this->x_position=$x_position;
$this->y_position=$y_position;
$this->colorR=$colorR;
$this->colorG=$colorG;
$this->colorB=$colorB;
$this->x=0;
$this->y=0;
$this->font=$font;
}
function insert()
{
header ("Content-type: image/jpeg");
$image=imagecreatefromjpeg($this->source);
$this->x=imagesx($image);
$this->y=imagesy($image);
$colx = imagecolorallocate ($image,(int)$this->colorR,(int)$this->colorG,(int)$this->colorB);
$col = imagecolorallocate ($image,(int)$this->colorR,(int)$this->colorG,(int)$this->colorB);

if(!$image)
die("this image does not exist ! try a currect filename as a jpeg file .");
if($this->x_position<0 || $this->x_position>$this->x || $this->y_position<0 || $this->y_position>$this->y)
die("the x_position or y_position values are not currect. they must be smaller than image dimentions . ");

imagestring ($image,$this->font,$this->x_position,$this->y_position,$this->text,$col);
imagejpeg ($image, "", 100);
}
}
?>
xpatval
La suite, car j'ai oublié l'appel à la classe:
CODE
<?php
    $imagename="img/xxx.jpg";// ton image générée.
    $string="le texte à placer";
    $colorr=85; // de 1 à 255
    $colorg=10; // idem
    $colorb=250; // idem
    $x_pos=50; // pour la position (à modifier)
    $y_pos=380; // pour la position (à modifier)
    $font=5;// selon ton humeur, de 1 à 5.

$ins=new insert_text_to_image($imagename, $string, $x_pos, $y_pos, $colorr, $colorg, $colorb, $font);
    $ins->insert();
?>


xpatval
captain_torche
xpatval -> Si j'ai bien compris, ta classe permet d'afficher un texte dans une image, aux coordonnées spécifiées.

Et, si j'ai bien compris la demande de Poppy (titre+message), il aimerait pouvoir aligner son texte à droite.
Portekoi
Oui mais en spécifiant des coordonnées à droite, le texte sera.... à droite.

C'est possible de le faire ainsi smile.gif
xpatval
Exact, il suffit de modifier les coordonnées (x et y), afin de positionner le texte DANS l'image, là où l'on veut...

xpatval
captain_torche
Oui, mais en utilisant imagestring, tu ne spécifies que les coordonnées de départ du texte, en partant de la gauche (ou j'ai raté un épisode).

Par exemple, si je spécifie une valeur X de 100, le texte commencera avec un décalage de 100 px sur la gauche de l'image, mais ne sera pas pour autant aligné à droite.
Portekoi
Euh... je vois pas où est le problème...
Ton image fait 100 px

-> 0 = me fais ecrire à gauche de l'image
-> 50 - longueur de mon texte = me fais ecrire au milieu de mon image
-> 100 - longueur de mon texte = me fais ecrire à droite de l'image

Non? Cela me parait logic ^_^


Portekoi
captain_torche
Je suis d'accord avec toi, mais je ne vois pas dans la classe, de fonction calculant la longueur du texte (et il faut aussi utiliser une police de taille fixe).
Portekoi
Ben la c'est chercher un peu la tite bête....

S'il utilise toujours la même taille de police, y a aucun soucis à faire un strlen($var)....

Et même s'il utilise une nouvelle taille, il n'est pas à 5 px prêt.....

smile.gif


Portekoi
captain_torche
Mais je suis comme ça : un chipoteur smile.gif
Sinon, faut voir si Poppy est satisfait.
Poppy
Merci pour vos réponses. Je cherche qqs choses de précis. C'est pour faire un emploi du temps avec une image en PHP, donc les données sont variables.

Je suis sûr que c'est possible, je l'ai déjà vu. Je cherche aussi de mon côté, si je trouve, je vous dis.

A plus tard wink.gif
X BioX
Alors,

Etant intéressé par le truc, et n'ayant pas trouver de solution toute faite sauf celle de xpatval que je remercie d'avoir répondu, voilà ce que j'ai réussi à faire:
CODE
// Trouve la taille du texte
$bbox=imagettfbbox (12, 0, $police, $Text);
$xcorr=0-$bbox[6];
$TaillText=$bbox[2]+$xcorr;
// Trouve la taille de l'image
$TaillImage=imagesx($image);
//Calcule la position (Image-Texte) -10 de décalage éventuel à gauche
$new=($TaillImage-$TaillText)-10;
//Ecrie le texte
imagettftext($image, 12, 0, $new, 50, $noir, $police, $Text);


Le tout dans une image PHP déjà structurée.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.