Poppy Posté 23 Février 2006 Posté 23 Février 2006 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 Posté 23 Février 2006 Posté 23 Février 2006 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" Portekoi
captain_torche Posté 23 Février 2006 Posté 23 Février 2006 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 Posté 23 Février 2006 Posté 23 Février 2006 (modifié) Ceci peut-il t'aider ? <?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); } }?> Modifié 23 Février 2006 par xpatval
xpatval Posté 23 Février 2006 Posté 23 Février 2006 La suite, car j'ai oublié l'appel à la classe: <?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 Posté 23 Février 2006 Posté 23 Février 2006 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 Posté 23 Février 2006 Posté 23 Février 2006 Oui mais en spécifiant des coordonnées à droite, le texte sera.... à droite. C'est possible de le faire ainsi
xpatval Posté 23 Février 2006 Posté 23 Février 2006 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 Posté 23 Février 2006 Posté 23 Février 2006 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 Posté 23 Février 2006 Posté 23 Février 2006 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 Posté 23 Février 2006 Posté 23 Février 2006 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 Posté 23 Février 2006 Posté 23 Février 2006 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..... Portekoi
captain_torche Posté 23 Février 2006 Posté 23 Février 2006 Mais je suis comme ça : un chipoteur Sinon, faut voir si Poppy est satisfait.
Poppy Posté 25 Février 2006 Auteur Posté 25 Février 2006 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
X BioX Posté 15 Mars 2006 Posté 15 Mars 2006 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: // 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 texteimagettftext($image, 12, 0, $new, 50, $noir, $police, $Text); Le tout dans une image PHP déjà structurée.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant