Bonjour,

Dans le cadre du développement de notre site, j'aimerais savoir s'il est possible de convertir des données récupérées via MYSQL et afficher à l'écran en image (jpeg, png,...), afin de pouvoir "enregistrer l'image sous...".

Pour rentrer un peu plus dans le détail, les données récupérées via MYSQL se compose d'une image me servant de fond, et de textes. L'ensemble de ces données sont modifiées en fonction des options choisis dans un panneau admin.

Si besoin de plus d'information ou d'un morceau de code, n'hésitez pas à me le demander.

En vous remerciant par avance de vos réponses.

5 réponses


Bonjour,

<?php
header ("Content-type: image/png");
$image = imagecreate(200,50);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 4, 35, 15, "GRAFIKART <3", $noir);
imagecolortransparent($image, $blanc);
imagepng($image);
?>

<img src="images.php" />
BAM Jan0
Auteur

Merci de ta réponse F0rZ3r0, mais sans explications il m'est difficile de comprendre comment on fait afin de pouvoir le faire à mon tour.

Si tu peux éventuellement reprendre un peu de ton temps pour m'expliquer ce serait bien sympathique.

Encore Merci.

Oui, je vais faire cela :)

Alors pour créer des images il nous faudra une librairie nommer GD / GD2 J'ai actuellement sur la version PHP5 la GD2.
Voir : Librairie GDune documentation remplie d'information.

Alors commençons.

Je souhaiterais :
Pouvoir avec un contenu texte, en image sans avoir à la créer de mais main.
Pour cela j'informe PHP que l’entête et une images en mettant :

header ("Content-type: image/png");

Maintenant il me faut des dimensions :

$image = imagecreate(W, H);

(W = Width, H = Height).

Dans cette exemple je veux que mon image soit de 200 de longueur et 50 d'hauteur donc :

$image = imagecreate(200,50);

Maintenant je veux une couleur pour mon future texte !
Ici par exemple je veux un texte en noir, et un fond blanc que je veux rendre transparent !

Pour cela je créer un variable nommé : "Noir"

$noir = imagecolorallocate($image, 0, 0, 0);

0,0,0 = #000000, black, ici il nous faut le code en RVB soit 0, 0, 0.

Pareil pour le blanc mais cette foi le code RVB et 255,255,255, ont obtient donc :

$blanc = imagecolorallocate($image, 255, 255, 255);

Maintenant je veux un contenu de texte dans cette image alors j'utilise imagestring, j'obtient

imagestring(SRC, FONT, X, Y, TEXT, COLOR);

Alors pour cela je note que SRC et notre variable image ont obtient :

imagestring($image, FONT, X, Y, TEXT, COLOR);

Pour FONT ses 1, 2, 3, 4 où 5 pour les polices internes d'encodage.
Je vais utiliser ici le numéro 4

J'obtient :

imagestring($image, 4, X, Y, TEXT, COLOR);

Pour X & Y ses la position du texte, je veux que X soit 35, et Y 15
j'obtient donc :

imagestring($image, 4, 35, 15, TEXT, COLOR);

/!\ À savoir :
X : coordonnée du coin en haut, à gauche.
Y : coordonnée du coin en haut, à gauche.

Maintenant je veux mon texte, alors je modifie TEXT par ma chaîne de caractère ici je veux que ce soit "Grafikart <3".

j'obtient donc :

imagestring($image, FONT, 35, 15, "Grafikart <3", COLOR);

Je veux pour finir la couleur du texte en noir, j'utiliserais donc ma variable $noir.

J'obtient :

imagestring($image, FONT, 35, 15, "Grafikart <3", $noir);

imagestring dessine une chaîne sur une ligne horizontale, dans l'image image, avec le coin en haut à gauche aux coordonnées (x, y) (le coin supérieur gauche est l'origine (0,0)) avec la couleur color.

Je veux maintenant rendre mon fond blanc en transparent pour avec donc un PNG, j'utiliserais ici la fonction : imagecolortransparent.

imagecolortransparent(SRC, COLOR);

SRC = notre variable $image
COLOR = Qu'elle couleur veux t'ont rendre transparent

Ici SRC ses $image, et notre couleur et $blanc !
J'obtient :

imagecolortransparent($image, $blanc);

Et pour fini (Oui enfin :p), je sort mon image en PNG !

j'utilise donc : imagepng(SRC); (Je ne me répéterais plus sur le mot SRC.

J'obtient :

imagepng($image);

Résultat :

<?php
header("Content-type: image/png");
$image = imagecreate(200,50);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 4, 35, 15, "GRAFIKART <3", $noir);
imagecolortransparent($image, $blanc);
imagepng($image);

Voilà ont à créer notre image avec notre contenu de texte, et un font transparent je veux l'afficher maintenant sur ma page j'utiliserais la balise classique de l'HTML soit <img src="SRC">.

SRC serra le chemin de notre fichier PHP contenant l'header de type image PNG j'obtiendrez :

<img src="image.php">

Voilà cordialement ! =)

BAM Jan0
Auteur

En te remerciant bcp F0rz3r0 pour tes explications clairs et concises.

Je vais tenter de l'effectuer afin de te faire un retour.

Aussi, si mon image n'est pas un header, mais une image mise en background d'une div (dans le code "<div="a">"), et que mes textes proviennent de mes span icluses dans la div (dans le code "<span class= "gk"><?php echo" {$data"gk"]}";?></span>") comme dans l'exemple ci-après:

page.php

<?php
    $sql = "SELECT * FROM compofifa ORDER BY date DESC LIMIT 0, 1";
    $req = mysql_query($sql) or die ('erreur SQL !</br>'.$sql.'</br>'.mysql_error());                            
        while ( $data = mysql_fetch_assoc($req) )
                {
            if ( $data"id"] == 1)
            {
?>
<div id="a">
    <span class= "entraineur"><?php echo" Entraineur: BAM {$data"entraineur"]}";?></span>
    <span class= "gk"><?php echo" {$data"gk"]}";?></span>
    <span class= "dcd"><?php echo" {$data"dcd"]}";?></span>
    <span class= "dc"><?php echo" {$data"dc"]}";?></span>
    <span class= "dcg"><?php echo" {$data"dcg"]}";?></span>
    <span class= "mdd"><?php echo" {$data"mdd"]}";?></span>
    <span class= "mdg"><?php echo" {$data"mdg"]}";?></span>
    <span class= "md"><?php echo" {$data"md"]}";?></span>
    <span class= "mg"><?php echo" {$data"mg"]}";?></span>
    <span class= "moc"><?php echo" {$data"moc"]}";?></span>
    <span class= "bud"><?php echo" {$data"bud"]}";?></span>
    <span class= "bug"><?php echo" {$data"bug"]}";?></span>
</div>

pagestyle.css

#a
{
    position:relative;
    width: 960px;
    height:539px;
    background: url('../images/compo352.png') no-repeat;    
}

Comment puis-je le mettre en place?

Encore merci.

Me revoici vous pouvez le faire de cette façon :

<?php
header("Content-type: image/png");
$image = imagecreate(200,50);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 4, 35, 15, "GRAFIKART <3", $blanc);
imagecolortransparent($image, $noir);
imagepng($image, "images.png"); // , "images.png" enregistre l'images dans le dossier racine vous pouvez remplacer par "images/".uniqid(time()).".png"
imagedestroy($image);

et afficher juste l'image via un dossier que vous allez parcourir .

Si vous souhaiter m'envoyez votre fiche projet pour que je jette un oeil et que je test en local votre site web afin de faire des test concret voici mon e-mail : f0rz3r0@outlook.fr

<html>
<head>
    <title></title>
</head>
<body>

<?php
$image = imagecreate(200,50);
$blanc = imagecolorallocate($image, 255, 255, 255);
$noir = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 4, 35, 15, "Mon_TEXT", $noir);
imagecolortransparent($image, $blanc);
imagepng($image, "img/".uniqid(time()).".png");
imagedestroy($image);
if($dir = opendir('img/')) {
    while(false !== ($fichier = readdir($dir))) {
        if($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
            echo '<img src="img/'.$fichier.'">';
        }
    }
}
?>
</body>
</html>