[RESOLU] Librairie GD

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Librairie GD

Re: Librairie GD

par orell1 » 17 déc. 2016, 23:34

Trop bien!
Un grand merci! c'est exactement ça!

Un grand merci et un grand bravo!
Tout est ok!

Re: Librairie GD

par Spols » 17 déc. 2016, 22:39

En virant le $y = 150;
en modifiant la ligne précédente car un 2eme wordwrap est contre productif
$lines = explode('|', wordwrap($text, 75, '|'));
devient
$lines = explode("\n", $text);

et aussi en modifiant le $y += 50; car c'est beaucoup comme espacement mais ca ca dépend de ton application.

J'arrive a afficher un texte centré en largeur.

si le texte doit être centrée en hauteur, il faut calculer ton premier $y avant la boucle en fonction de l'interligne désiré et du nombre de lignes.

Re: Librairie GD

par orell1 » 17 déc. 2016, 01:09

ok merci.
J'avais déjà croisé ces exemples mais je ne sait pas comment l'intégrer... je ne sais pas quoi prendre et comment le construire surtout. :-(

Re: Librairie GD

par @rthur » 17 déc. 2016, 00:45

Voici une librairie qui pourrait t'aider (il y a dans les démos, le résultat que tu souhaites obtenir) :
https://github.com/stil/gd-text

Re: Librairie GD

par orell1 » 16 déc. 2016, 23:37

Bonsoir,
Oui j'ai l'impression que c'est hypercomplexe pour pas grand chose! looool
Mais là sincèrement je galère.
Voici ce le rendu que je souhaiterai obtenir : http://dl.free.fr/reMrsfsVU

Merci par avance.

Re: Librairie GD

par @rthur » 16 déc. 2016, 10:18

oui et malheureusement rien... :-(
rien de rien ? :D

Re: Librairie GD

par moogli » 16 déc. 2016, 10:01

ça donne quoi ?
parce que la tu as un truc super complexe alors que j'ai l'impression que ce n'est pas nécessaire.
est ce que l'on peux avoir un exemple du texte a afficher ?

est ce que tu peux décrire exactement le résultat souhaité ?

@+

Re: Librairie GD

par orell1 » 15 déc. 2016, 15:36

oui et malheureusement rien... :-(

Re: Librairie GD

par moogli » 15 déc. 2016, 11:24

question à 2 balles : tu as testé sans toute cette mécanique a partir du code que je t'ai fournis ?

exemple http://phpjungle.info/phpfrance/277435.php (pour voir le source php http://phpjungle.info/phpfrance/277435.php?source=true)

pour suivre le fonctionnement de ton script le plus simple reste un débogueur (un ide + xdebug).

@+

Re: Librairie GD

par Spols » 15 déc. 2016, 09:19

met en commentaire toute la fin de ton code à partir de ob_start();
et dans ta boucle, fais un echo "x=".$x." y=".$y.."<br>";

tu peux aussi faire afficher d'autres variable pour en vérifier le contenu

ensuite affiche cette page comme une page et non une image mais avec les paramètres GET

Re: Librairie GD

par orell1 » 14 déc. 2016, 22:28

Merci, mais comment je fais pour afficher mes valeur $x et$y ?
Merci.

Re: Librairie GD

par Spols » 14 déc. 2016, 20:41

tu n'a pas enlevé $y = 150;

fait afficher tes valeurs de $x et $y aussi la taille de ta box pour être sur que les calculs se fasse correctement

Re: Librairie GD

par orell1 » 14 déc. 2016, 19:14

ok là je n'ai pas d'erreur et l'image s'affiche mais le texte n'est toujours pas centré :-(

voici le résultat ==> http://dl.free.fr/fPeAZR1kf
<?php
require('gif.class.php');
$animation = array();
$duree = array();
  
//define('LARGEUR', 600);
//define('HAUTEUR', 600);
/* * *******************************  * Parametre  * ********************************  */ 
$largeur = 600; /* longueur de l'image */ 
$hauteur = 600; /* hauteur de l'image */ 

$txt =  str_replace ("v&oelig;ux", "voeux", $_GET['fichier']); 
$txt = rawurlencode($txt);
$txt = str_replace('%92', '%27', $txt);
$txt = rawurldecode($txt);

/* * *******************************  * IMAGE 1  * ********************************  */ 
$image = imagecreate($largeur, $hauteur); 
/* Background */ 
$background = imagecolorallocate($image, 0, 255, 0);
$image= imagecreatefrompng('carte_voeux_2016/1.png'); //Notre joli fond :p 
/* Couleur du text */ 
if($_GET['couleur'] =='blanc') {
$couleurTxt = imagecolorallocate($image, 255, 255, 255); 
} else {
$couleurTxt = imagecolorallocate($image, 19, 57, 92); 
}
/* texte à mettre dans l'image */ 

/* Taille du texte */ 
$font_size = 10; 
putenv('GDFONTPATH=' . realpath('.'));
$font = 'arial.ttf';
/* Hauteur et largeur des caratères */ 
$largeurCaractere = ImageFontWidth($font_size); 
$hauteurCaractere = ImageFontHeight($font_size); 
/* Longueur du texte (taille caratère X nombre de caractère) */ 
$largeurTxt = $largeurCaractere * strlen($txt); 
/* Recherche de la position horizontale centrale pour centrer le texte */ 
$positionCentreHor = ceil(($largeur - $largeurTxt) / 2); 
/* Recherche de la position horizontale centrale pour centrer le texte */ 
//$positionCentreVer = ceil(($hauteur - $hauteurCaractere) / 2); 
$positionCentreVer = 160;  
/* Ajout du texte au centre de l'image */ 

$angle = 0;
$text_length = 90;

$new_text = wordwrap($txt, $text_length, "<br />", true);
$text = str_replace('<br />', "\n", $new_text);

$lines = explode('|', wordwrap($text, 75, '|'));

$y = 150;
// Loop through the lines and place them on the image
foreach ($lines as $line)
{
$text_box = imagettfbbox($font_size,$angle,$font,$line);
// Get your Text Width and Height
$text_width = $text_box[2]-$text_box[0];
$text_height = $text_box[7]-$text_box[1];


// Calculate coordinates of the text
$x = ($largeur/2) - ($text_width/2);
if (empty($y)) {$y = ($hauteur/2) - ($text_height/2);}//ya un truc à faire avec Y pour qu'il soit à la bonne valeur à chaque itération
    imagettftext($image, $font_size, 0, $x, $y, $couleurTxt, $font, $line);

    // Increment Y so the next line is below the previous line
    $y += 50;
}

ob_start();
imagegif($image);
$animation[] = ob_get_clean();
$duree[] = 35;
imagedestroy($image);


/*  */
/* * *******************************  * CREATION IMAGE  * ********************************  */   
$gif = new GIFEncoder($animation, $duree, 0, 2, 0, 0, 0, 'bin');
header ("Content-type: image/gif");
echo $gif->GetAnimation();
?>

Re: Librairie GD

par Spols » 14 déc. 2016, 17:55

Je viens de le voir, ton $text_box = imagettfbbox($font_size,$angle,$font,$text); utilise encore $text plutot que $line

si tu garde la définition de $x et $y avant la boucle, $y n'est jamais vide donc jamais calculé (3 lignes à retirer)

et quand tu dis ca marche pas, pourrais tu préciser ?

Re: Librairie GD

par orell1 » 14 déc. 2016, 16:19

Je dois vraiment être très mauvais car ça ne fonctionne pas :-(

J'ai fait ça :
require('gif.class.php');
$animation = array();
$duree = array();
  
//define('LARGEUR', 600);
//define('HAUTEUR', 600);
/* * *******************************  * Parametre  * ********************************  */ 
$largeur = 600; /* longueur de l'image */ 
$hauteur = 600; /* hauteur de l'image */ 

$txt =  str_replace ("v&oelig;ux", "voeux", $_GET['fichier']); 
$txt = rawurlencode($txt);
$txt = str_replace('%92', '%27', $txt);
$txt = rawurldecode($txt);

/* * *******************************  * IMAGE 1  * ********************************  */ 
$image = imagecreate($largeur, $hauteur); 
/* Background */ 
$background = imagecolorallocate($image, 0, 255, 0);
$image= imagecreatefrompng('carte_voeux_2016/1.png'); //Notre joli fond :p 
/* Couleur du text */ 
if($_GET['couleur'] =='blanc') {
$couleurTxt = imagecolorallocate($image, 255, 255, 255); 
} else {
$couleurTxt = imagecolorallocate($image, 19, 57, 92); 
}
/* texte à mettre dans l'image */ 

/* Taille du texte */ 
$font_size = 10; 
putenv('GDFONTPATH=' . realpath('.'));
$font = 'arial.ttf';
/* Hauteur et largeur des caratères */ 
$largeurCaractere = ImageFontWidth($font_size); 
$hauteurCaractere = ImageFontHeight($font_size); 
/* Longueur du texte (taille caratère X nombre de caractère) */ 
$largeurTxt = $largeurCaractere * strlen($txt); 
/* Recherche de la position horizontale centrale pour centrer le texte */ 
$positionCentreHor = ceil(($largeur - $largeurTxt) / 2); 
/* Recherche de la position horizontale centrale pour centrer le texte */ 
//$positionCentreVer = ceil(($hauteur - $hauteurCaractere) / 2); 
$positionCentreVer = 160;  
/* Ajout du texte au centre de l'image */ 

$angle = 0;
$text_length = 90;
$new_text = wordwrap($txt, $text_length, "<br />", true);


// Calculate coordinates of the text
$x = ($image_width/2) - ($text_width/2);
$y = ($image_height/2) - ($text_height/2);

$lines = explode('|', wordwrap($text, 75, '|'));

// Starting Y position
$y = 150;

// Loop through the lines and place them on the image
foreach ($lines as $line)
{
  $text_box = imagettfbbox($font_size,$angle,$font,$text);
// Get your Text Width and Height
$text_width = $text_box[2]-$text_box[0];
$text_height = $text_box[7]-$text_box[1];

// Calculate coordinates of the text
$x = ($image_width/2) - ($text_width/2);
if (empty($y)) {$y = ($image_height/2) - ($text_height/2);}//ya un truc à faire avec Y pour qu'il soit à la bonne valeur à chaque itération
    imagettftext($image, $font_size, 0, $x, $y, $couleurTxt, $font, $line);

    // Increment Y so the next line is below the previous line
    $y += 50;
}

ob_start();
imagegif($image);
$animation[] = ob_get_clean();
$duree[] = 35;
imagedestroy($image);


/*  */
/* * *******************************  * CREATION IMAGE  * ********************************  */   
$gif = new GIFEncoder($animation, $duree, 0, 2, 0, 0, 0, 'bin');
header ("Content-type: image/gif");
echo $gif->GetAnimation();