[RESOLU] Librairie GD

Mammouth du PHP | 1967 Messages

14 déc. 2016, 14:55

Je ne sais pas tester, mais je mettrai le imagettfbbox() ausi dans la boucle, pour aligner au centre chauqe bloc de texte indépendament
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 687 Messages

14 déc. 2016, 15:24

Non toujours pas :-(
J'ai fait :
// 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);
$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);
    imagettftext($image, $font_size, 0, $x, $y, $couleurTxt, $font, $line);

    // Increment Y so the next line is below the previous line
    $y += 50;
}
Et pour le coup l'image ne s'affiche plus du tout ...

Mammouth du PHP | 1967 Messages

14 déc. 2016, 15:53

c'est normal $text_box n'est pas défini quand tu l'utilise

$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);
$y = ($image_height/2) - ($text_height/2);
    imagettftext($image, $font_size, 0, $x, $y, $couleurTxt, $font, $line);

    // Increment Y so the next line is below the previous line
    $y += 50;
}[/php
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 1967 Messages

14 déc. 2016, 15:53

c'est normal $text_box n'est pas défini quand tu l'utilise
$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;
}
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 687 Messages

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œ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();

Mammouth du PHP | 1967 Messages

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 ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 687 Messages

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();
?>

Mammouth du PHP | 1967 Messages

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 687 Messages

14 déc. 2016, 22:28

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

Mammouth du PHP | 1967 Messages

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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).

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 687 Messages

15 déc. 2016, 15:36

oui et malheureusement rien... :-(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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é ?

@+
Il en faut peu pour être heureux ......

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

16 déc. 2016, 10:18

oui et malheureusement rien... :-(
rien de rien ? :D
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 687 Messages

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.