Automatisch generierte Bilder in eine Datenbank speichern

  • PHP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Paul-Jeschke.

    Automatisch generierte Bilder in eine Datenbank speichern

    Guten Abend Community,

    ich sitze gerade vor einem Problem. Und zwar möchte ich viele automatisch generierte Grafiken in eine Datenbank speichern. (und bitte fangt nicht wieder die alte Diskusion an ob man nun Bilder in einer Datenbank speichert oder nicht)
    Diese generiere ich ganz normal in PHP.
    Hier mal schnell ein kurzes Beispiel:


    bild.php

    PHP-Quellcode

    1. $Bild = imagecreatetruecolor(10,10);
    2. imagefill($Bild, 0,0, imagecolorallocate($Bild, 255,255,255));
    3. imagejpeg($Bild);
    4. imagedestroy($Bild);


    So dieses Bild will ich nun in eine Datenbank packen.
    Also in etwa so:

    speichern.php

    PHP-Quellcode

    1. $bild = fopen("bild.php", "r");
    2. $data = addslashes(fread($bild,filesize("bild.php")));
    3. $sql = "Insert Into `Bilder` (`bild`) Values('".$data."')";


    Was sich aber logisch erschliest ist das er nun die Binärdaten der bild.php nimmt und nicht die des eigentlichen Bildes die frage ist nun wie komme ich zu diesen Daten.

    Lösung oder auch nicht

    Ich habe jetzt endlich eine Lösung gefunden.
    Der magische befehel passthru() hat mir geholfen.
    Mein Code musste ich nur leicht anpassen und jetzt sieht er so aus:
    bild.php

    PHP-Quellcode

    1. // print_R($argv);
    2. // $argv = ein Array der Übergebenen parameter
    3. // $argc = die Anzahl der elemente in argv
    4. // Hinweis: es können keine Arrays übergeben werden
    5. header("Content-type:image/png");
    6. $Bild = imagecreatetruecolor(10,10);
    7. imagefill($Bild, 0,0, imagecolorallocate($Bild, 255,0,255));
    8. imagejpeg($Bild);
    9. imagedestroy($Bild);


    speichern.php

    PHP-Quellcode

    1. mysql_connect("127.0.0.1", "*****", "******");
    2. $type = ".jpg";
    3. //ruft das script auf und ich hänge zu demo Zwecken noch ein paar parameter an.
    4. $bin = passthru("php/php.exe htdocs/MY/Tests/bild.php lol hallo");
    5. $data = addslashes($bin);
    6. $sql = "Insert Into `paule`.`bilder` (`Bild`) Values('".$data."')";
    7. mysql_query($sql);
    8. $sql = "Select `Bild` From `paule`.`bilder` Where ID = 1";
    9. $result = mysql_query($sql);
    10. $binary = mysql_fetch_array($result);
    11. // header("Content-type:image/png");
    12. echo $binary[0];


    EDIT:

    OK habe mich getäuscht es geht doch nicht so da dass die ausgabe von passthru selber war

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Paul-Jeschke“ ()

    Jetzt aber wirklich die Lösung!!! :D (Ich bin richtig happy)

    Morgen ihr da draußen :D

    Ich habe jetzt endlich eine Lösung gefunden!

    Und die sieht so aus:

    bild.php

    PHP-Quellcode

    1. // print_R($argv);
    2. // $argv = ein Array der Übergebenen parameter
    3. // $argc = die Anzahl der elemente in argv
    4. // Hinweis: es können keine Arrays übergeben werden
    5. mysql_connect("127.0.0.1", "****","*******");
    6. //hält den Ausgabebuffer im Speicher
    7. ob_start();
    8. header("Content-type:image/png");
    9. $Bild = imagecreatetruecolor(10,10);
    10. imagefill($Bild, 0,0, imagecolorallocate($Bild, 255,0,255));
    11. imagejpeg($Bild);
    12. //gibt die Binärdaten zurück
    13. $bild = ob_get_contents();
    14. imagedestroy($Bild);
    15. $data = addslashes($bild);
    16. $sql = "Insert Into `paule`.`bilder` (`Bild`) Values('".$data."')";
    17. mysql_query($sql);


    Und das war schon der ganze Zauber...
    Und nun habe ich die Bilder in der Datenbank ohne Sie zwichendurch zu speichern. :thumbsup: