Créer un compte
Connexion

Generateur d'image ave texte

Pour créer et répondre aux sujets, vous devez être connecté.
Ce sujet est résolu.
Pages: 1
Auteur Message
Lolo44
08/12/2010 à 12:48:29
Lolo44
Membre
Bonjour,
Je cherche un script PHP pour fair exactement comme ca --> exemple
dans la barre d'adresse il y a : http://www.joueurdugrenier.fr/inc/ajax/genere_titre.php?str=texte&taille=16
Je voudrais un script qui me permette de faire ca (avec la couleur si possible)
Comme celui du SDW mais ou le texte est visible dans la barre d'adresse.
EDIT:Et de choisir la police aussi (candara dans mon cas)

Lolo44
07/12/2010 à 09:34:30
Lolo44
Membre
Personne? :/

gilbert1995
11/12/2010 à 05:56:15
gilbert1995
Membre
Je ne sais pas pour la couleur et la grosseur mais pour le texte utilise se script

<?php
//On importe l'image a laquelle nous allons ajouter le texte
$img = imagecreatefrompng('image.png');
//On prepare la couleur, en RGB
$noir = imagecolorallocate($img, 0, 0, 0);
//On ajoute le texte a l'aide de la fonction imagettftext
imagettftext($img, 20, 0, 15, 30, $noir, 'chopin_script.ttf', '<?php echo $_GET['texte'];?>');
//On affiche l'image
header('Content-type: image/png');
imagepng($img);
?>
ex: http://...index.php?texte=Ton texte

Lolo44
11/12/2010 à 12:14:36
Lolo44
Membre
OK merci je vais tester ;)

Lolo44
11/12/2010 à 13:04:54
Lolo44
Membre
Merci , mais il y a une erreur : Parse error: syntax error, unexpected T_STRING on line 7,
L'erreur est imagettftext($img, 20, 0, 15, 30, $noir, 'chopin_script.ttf', '<?php echo $_GET['texte'];?>');
 
Il y a un j'ai essayé de mettre des " ou des \' mais ca affiche <?php echo .. sur l'image ..

Spitfire 95
11/12/2010 à 15:15:30
Spitfire 95
Membre
Et comme ça ?
<?php
//On importe l'image a laquelle nous allons ajouter le texte
$img = imagecreatefrompng('image.png');
//On prepare la couleur, en RGB
$noir = imagecolorallocate($img, 0, 0, 0);
//On ajoute le texte a l'aide de la fonction imagettftext
imagettftext($img, 20, 0, 15, 30, $noir, 'chopin_script.ttf', $_GET['texte']);
//On affiche l'image
header('Content-type: image/png');
imagepng($img);
?>
<?php ?> dans des balises déjà ouvertes, ça pouvait pas trop marcher. La balise d'ouverture a été interprétée comme du texte (string) malgré l'absence de quotes, et la seconde a fermé la première, la suite devenant du HTML envoyé tel quel au navigateur.
Ensuite, echo sert à afficher qqch sur une page HTML, pas à écrire la valeur de la variable dans une instruction PHP. Dans ce code, ce que tu as voulu faire, c'est de remplacer $_GET['texte'] par sa valeur. Donc ce n'est pas l'écrire qu'il faut, mais remplacer la variable par sa valeur, donc il suffit juste d'entrer l'instance pour que l'interpréteur PHP la remplace.

PS : Merci de penser aux balises code.

Lolo44
11/12/2010 à 16:28:30
Lolo44
Membre
Merci Spitfire95 , il suffisait de faire comme le '$noir,' pour la couleur .

Spitfire 95
11/12/2010 à 16:47:26
Spitfire 95
Membre
Oui.
Et si tu veux compléter la personnalisation :
<?
// Génération de l'image
$img = imagecreatefrompng('image.png');   // Image de base
$couleur = imagecolorallocate($img,$_GET['r'],$_GET['g'],$_GET['b']);  // Couleur du texte en RGB
//On ajoute le texte a l'aide de la fonction imagettftext
imagettftext($img,$_GET['fontSize'],$_GET['$angle'],$_GET['x'],$_GET['y'],$couleur,$_GET['police'], $_GET['texte']);

// Affichage de l'image
header('Content-type: image/png');
imagepng($img);
?>
et dans l'url, tu pourras mettre les arguments suivants :
Quote

?fontSize= => Taille du texte en px
&police= => Police TTF à utiliser

&angle= => Angle du texte en °
&x= => Position d'écriture du texte en px (abscisses)
&y= => Position d'écriture du texte en px (ordonnées)

&r= => Taux de rouge de la couleur (0<=r<=255)
&g= => Taux de vert de la couleur (0<=g<=255)
&b= => Taux de bleu de la couleur (0<=b<=255)

&texte= => Texte à écrire
Les données seront seront à préciser dans un formulaire.
L'angle, la taille de la police, les positions x et y de départ et le texte devront être entrés dans des champs de texte,
les valeurs RGB devront être sélectionnées dans un colorpicker
la police devra être choisie dans une liste de choix.
Après, tu peux bien sûr retirer certaines des options que j'ai ajouté pour rendre plus simple ton générateur.


Lolo44
11/12/2010 à 19:03:06
Lolo44
Membre
Merci Spitfire95 , y a pas plus complet ! Je teste toutes les options et je dit si ca marche  :)

EDIT:Le texte ne s'affiche pas même si je ne laisse que :
/index.php?police=candara.ttf&texte=test

ybouane
11/12/2010 à 19:53:48
ybouane
Admin
Bonjour,
Essaye ce code:
<?
$img = imagecreatetruecolor(100, 100);
imagefill($img, 0,0 imagecolorallocate($img, 255,255,255));
if(!isset($_GET['r'])){$_GET['r'] = 255;}
if(!isset($_GET['g'])){$_GET['g'] = 255;}
if(!isset($_GET['b'])){$_GET['b'] = 255;}
if(!isset($_GET['fontSize'])){$_GET['fontSize'] = 30;}
if(!isset($_GET['angle'])){$_GET['angle'] = 0;}
if(!isset($_GET['x'])){$_GET['x'] = 0;}
if(!isset($_GET['y'])){$_GET['y'] = 255;}
if(!isset($_GET['police'])){$_GET['police'] = 'candara.ttf';}
if(!isset($_GET['texte'])){     $_GET['texte'] = '';}
$couleur = imagecolorallocate($img,$_GET['r'],$_GET['g'],$_GET['b']);
imagettftext($img,$_GET['fontSize'],$_GET['$angle'],$_GET['x'],$_GET['y'],$couleur,$_GET['police'], $_GET['texte']);
header('Content-type: image/png');
imagepng($img);
?>
C'est le même que celui de Spitfire95, sauf que si les variables ne sont pas définies dans l'URL, des valeurs par défaut seront utilisées.
Et tu n'a pas besoin d'image de départ(image.png), ici c'est une image blanche de 100px*100px qui est utilisée comme arrière plan.

Cordialement :)

Image
Lolo44
11/12/2010 à 20:11:53
Lolo44
Membre
Voici la page en question : page de test

PS: je n'ai pas modifier le code

Spitfire 95
11/12/2010 à 20:42:25
Spitfire 95
Membre
Quote: Ybouane
C'est le même que celui de Spitfire95, sauf que si les variables ne sont pas définies dans l'URL, des valeurs par défaut seront utilisées.
Je comptais le faire au départ, mais comme je suis parti du principe que ce serait fait par un générateur, il y aurait toujours une valeur pour chacune des variables.

Par contre, je ne comprend pas l'erreur...


@Ybouane : J'ai vu le bouton "+ Plus". C'est parfait.  :#1:

ybouane
11/12/2010 à 20:58:14
ybouane
Admin
Bonjour,
l'erreur c'était qu'il manquait une virgule.
Voici le code:
<?
$img = imagecreatetruecolor(100, 100);
imagefill($img, 0,0, imagecolorallocate($img, 255,255,255));
if(!isset($_GET['r'])){$_GET['r'] = 255;}
if(!isset($_GET['g'])){$_GET['g'] = 255;}
if(!isset($_GET['b'])){$_GET['b'] = 255;}
if(!isset($_GET['fontSize'])){$_GET['fontSize'] = 30;}
if(!isset($_GET['angle'])){$_GET['angle'] = 0;}
if(!isset($_GET['x'])){$_GET['x'] = 0;}
if(!isset($_GET['y'])){$_GET['y'] = 255;}
if(!isset($_GET['police'])){$_GET['police'] = 'candara.ttf';}
if(!isset($_GET['texte'])){     $_GET['texte'] = '';}
$couleur = imagecolorallocate($img,$_GET['r'],$_GET['g'],$_GET['b']);
imagettftext($img,$_GET['fontSize'],$_GET['$angle'],$_GET['x'],$_GET['y'],$couleur,$_GET['police'], $_GET['texte']);
header('Content-type: image/png');
imagepng($img);
?>

Cordialement :)

Image
Spitfire 95
11/12/2010 à 21:30:49
Spitfire 95
Membre
Ah, en effet. Difficile à voir, ces petites erreurs.

Pourquoi ne pas mettre d'image de fond, comme avant ?
<?
if(isset($img){
    $createfrom='imagecreatefrom'.pathinfo("/forum/index.php")[1];
    $img = $createfrom($_GET['image']);}
else {
    if(!isset($_GET['r_bg'])){$_GET['r_bg']=0;}
    if(!isset($_GET['g_bg'])){$_GET['g_bg']=0;}
    if(!isset($_GET['b_bg'])){$_GET['b_bg']=0;}
    if(!isset($_GET['width'])){$_GET['width']=0;}
    if(!isset($_GET['height'])){$_GET['height']=0;}
    $img = imagecreatetruecolor($_GET['width'],$_GET['height']);
    imagefill($img, 0,0, imagecolorallocate($img,$_GET['r_bg'],$_GET['g_bg'],$_GET['b_bg']));}
if(!isset($_GET['r_fg'])){$_GET['r_fg'] = 0;}
if(!isset($_GET['g_fg'])){$_GET['g_fg'] = 0;}
if(!isset($_GET['b_fg'])){$_GET['b_fg'] = 0;}
if(!isset($_GET['fontSize'])){$_GET['fontSize'] = 16;}
if(!isset($_GET['angle'])){$_GET['angle'] = 0;}
if(!isset($_GET['x'])){$_GET['x'] = 0;}
if(!isset($_GET['y'])){$_GET['y'] = 60;}
if(!isset($_GET['police'])){$_GET['police'] = 'candara.ttf';}
if(!isset($_GET['texte'])){     $_GET['texte'] = '';}
$couleur = imagecolorallocate($img,$_GET['r_fg'],$_GET['g_fg'],$_GET['b_fg']);
imagettftext($img,$_GET['fontSize'],$_GET['$angle'],$_GET['x'],$_GET['y'],$couleur,$_GET['police'], $_GET['texte']);
header('Content-type: image/png');
imagepng($img);
?>
J'ai remplacé la couleur par défaut du texte par 0,0,0 car l'image étant blanche, blanc sur blanc, c'est pas très lisible. Donc noir sur blanc par défaut.
Et j'ai ajouté la possibilité de charger une image autre que png. La fonction pour séparer le nom du fichier de l'extension ne fonctionne peut-être pas. À vérifier. J'ai fait un mélange de ce que j'ai trouvé en PHP et de ce que j'aurais (j'ai) fait en Python ^^

==EDIT==
Ça ne peut pas marcher. L'image par défaut fait 100x100 px. La taille du texte est trop grande par rapport à la taille de l'image, et y par défaut est beaucoup trop élevé.
J'ai mis y=60 et fontSize à 16px par défaut.

==EDIT 2==
J'ai ajouté la possibilité de définir les couleurs de fond si aucune image n'est spécifiée.
Donc r_bg; g_bg; et v_bg sont pour le background, et r;g;b ont étés remplacées par r_fg; g_fg; et b_fg pour le foreground.

==EDIT 3==
Et maintenant, si aucune image de base n'est spécifiée, il est possible de choisir les dimensions avec width et height.
On peut difficilement faire plus personnalisable  :D

Lolo44
11/12/2010 à 22:27:06
Lolo44
Membre
C'est tres complet ;) Il y a quelques petites erreurs , voici le code que j'utilise :

<?php
if(isset($img)){
    $createfrom='imagecreatefrom'.pathinfo("image.png"). 1;
    $img = $createfrom($_GET['image']);}
else {
    if(!isset($_GET['r_bg'])){$_GET['r_bg']=0;}
    if(!isset($_GET['g_bg'])){$_GET['g_bg']=0;}
    if(!isset($_GET['b_bg'])){$_GET['b_bg']=0;}
    if(!isset($_GET['width'])){$_GET['width']=0;}
    if(!isset($_GET['height'])){$_GET['height']=0;}
    $img = imagecreatetruecolor($_GET['width'],$_GET['height']);
    imagefill($img, 0,0, imagecolorallocate($img,$_GET['r_bg'],$_GET['g_bg'],$_GET['b_bg']));}
if(!isset($_GET['r_fg'])){$_GET['r_fg'] = 0;}
if(!isset($_GET['g_fg'])){$_GET['g_fg'] = 0;}
if(!isset($_GET['b_fg'])){$_GET['b_fg'] = 0;}
if(!isset($_GET['fontSize'])){$_GET['fontSize'] = 16;}
if(!isset($_GET['angle'])){$_GET['angle'] = 0;}
if(!isset($_GET['x'])){$_GET['x'] = 0;}
if(!isset($_GET['y'])){$_GET['y'] = 60;}
if(!isset($_GET['police'])){$_GET['police'] = 'candara.ttf';}
if(!isset($_GET['texte'])){     $_GET['texte'] = '';}
$couleur = imagecolorallocate($img,$_GET['r_fg'],$_GET['g_fg'],$_GET['b_fg']);
imagettftext($img,$_GET['fontSize'],$_GET['$angle'],$_GET['x'],$_GET['y'],$couleur,$_GET['police'], $_GET['texte']);
header('Content-type: image/png');
imagepng($img);
?>

Dans la barred'adresse il y a :
/index.php?img=image.png&texte=texte1&width=1000&height=150&r_fg=255&g_fg=255&b_fg=255&fontSize=72
Mais il n'y a plus d'image de fond , le fond est noir ...



Spitfire 95
12/12/2010 à 14:00:04
Spitfire 95
Membre
Oops ^^
<?
if(isset($_GET['image'])){
    $createfrom='imagecreatefrom'.pathinfo("/forum/index.php")[2];
    $img = $createfrom($_GET['image']);}
else {
    if(!isset($_GET['r_bg'])){$_GET['r_bg']=255;}
    if(!isset($_GET['g_bg'])){$_GET['g_bg']=255;}
    if(!isset($_GET['b_bg'])){$_GET['b_bg']=255;}
    if(!isset($_GET['width'])){$_GET['width']=200;}
    if(!isset($_GET['height'])){$_GET['height']=20;}
    $img = imagecreatetruecolor($_GET['width'],$_GET['height']);
    imagefill($img, 0,0, imagecolorallocate($img,$_GET['r_bg'],$_GET['g_bg'],$_GET['b_bg']));}
if(!isset($_GET['r_fg'])){$_GET['r_fg'] = 0;}
if(!isset($_GET['g_fg'])){$_GET['g_fg'] = 0;}
if(!isset($_GET['b_fg'])){$_GET['b_fg'] = 0;}
if(!isset($_GET['fontSize'])){$_GET['fontSize'] = 16;}
if(!isset($_GET['angle'])){$_GET['angle'] = 0;}
if(!isset($_GET['x'])){$_GET['x'] = 0;}
if(!isset($_GET['y'])){$_GET['y'] = 60;}
if(!isset($_GET['police'])){$_GET['police'] = 'candara.ttf';}
if(!isset($_GET['texte'])){     $_GET['texte'] = '';}
$couleur = imagecolorallocate($img,$_GET['r_fg'],$_GET['g_fg'],$_GET['b_fg']);
imagettftext($img,$_GET['fontSize'],$_GET['$angle'],$_GET['x'],$_GET['y'],$couleur,$_GET['police'], $_GET['texte']);
header('Content-type: image/png');
imagepng($img);
?>


Lolo44
12/12/2010 à 11:07:07
Lolo44
Membre
Parse error: syntax error, unexpected '{' on line 2

J'ai essayé de changer comme la dernière fois : en mettant un ) juste avant le { mais la ca ne marche pas.



Spitfire 95
12/12/2010 à 14:00:43
Spitfire 95
Membre
Corrigé. C'était en effet une parenthèse fermante manquante.
Cordialement.

Lolo44
12/12/2010 à 16:47:39
Lolo44
Membre
C'est ce que j'ai essayé , mais ca met :

Parse error: syntax error, unexpected '[' on line 3


Spitfire 95
12/12/2010 à 21:50:09
Spitfire 95
Membre
Là je sais pas trop. J'ai utilisé la syntaxe Python sur du PHP en fait ^^'
Je voulais obtenir le 3e élement de la liste. Je vais chercher comment on fait en PHP.

ybouane
13/12/2010 à 05:19:00
ybouane
Admin
Bonjour,
Essaye:
<?
if(isset($_GET['image'])){
        $ext = pathinfo($_GET['image']);
        $ext = $ext['extension'];
        if($ext=='png')
        {
                $img = imagecreatefrompng($_GET['image']);
        }
        elseif($ext=='gif')
        {
                $img = imagecreatefromgif($_GET['image']);
        }
        elseif($ext=='jpg' or $ext=='jpeg')
        {
                $img = imagecreatefromjpeg($_GET['image']);
        }
        else
        {
                echo 'Erreur format d\'image non supporte.';
                exit;
        }
}
else {
    if(!isset($_GET['r_bg'])){$_GET['r_bg']=255;}
    if(!isset($_GET['g_bg'])){$_GET['g_bg']=255;}
    if(!isset($_GET['b_bg'])){$_GET['b_bg']=255;}
    if(!isset($_GET['width'])){$_GET['width']=200;}
    if(!isset($_GET['height'])){$_GET['height']=20;}
    $img = imagecreatetruecolor($_GET['width'],$_GET['height']);
    imagefill($img, 0,0, imagecolorallocate($img,$_GET['r_bg'],$_GET['g_bg'],$_GET['b_bg']));}
if(!isset($_GET['r_fg'])){$_GET['r_fg'] = 0;}
if(!isset($_GET['g_fg'])){$_GET['g_fg'] = 0;}
if(!isset($_GET['b_fg'])){$_GET['b_fg'] = 0;}
if(!isset($_GET['fontSize'])){$_GET['fontSize'] = 16;}
if(!isset($_GET['angle'])){$_GET['angle'] = 0;}
if(!isset($_GET['x'])){$_GET['x'] = 0;}
if(!isset($_GET['y'])){$_GET['y'] = 60;}
if(!isset($_GET['police'])){$_GET['police'] = 'candara.ttf';}
if(!isset($_GET['texte'])){     $_GET['texte'] = '';}
$couleur = imagecolorallocate($img,$_GET['r_fg'],$_GET['g_fg'],$_GET['b_fg']);
imagettftext($img,$_GET['fontSize'],$_GET['$angle'],$_GET['x'],$_GET['y'],$couleur,$_GET['police'], $_GET['texte']);
header('Content-type: image/png');
imagepng($img);
?>
Il vaut mieux limiter les formats à ceux supportés, comme ça il n'y aura pas d'erreurs php.

Cordialement :)

Image
Lolo44
14/12/2010 à 17:16:55
Lolo44
Membre
Le message d'erreur n'apparait pas, mais la page est vide !

ybouane
15/12/2010 à 01:59:51
ybouane
Admin
Bonjour,
vérifie que la police 'candara.ttf' existe ou utilise une autre sans oublier de modifier le code.
Et ensuite, modifie la ligne:
if(!isset($_GET['y'])){$_GET['y'] = 60;} par
if(!isset($_GET['y'])){$_GET['y'] = 20;}
Cordialement  :)

Image
Lolo44
15/12/2010 à 13:17:52
Lolo44
Membre
candara.ttf est bien hébergée ,
Sinon le code marche , le texte , mais pas l'image , pourtant la variable $img est bien dans la barre d'adresses...
Et "image.png" est bien hébergée.

Spitfire 95
15/12/2010 à 20:06:17
Spitfire 95
Membre
C'est pas $_GET['img'] mais $_GET['image'] dans le code. Donc remplace img= par image=


Lolo44
15/12/2010 à 20:23:35
Lolo44
Membre
Merci ! Ca marche , topic résolu!

Pages: 1