PHP-generiertes Bild in DB speichern

Diskutiere mit über: PHP-generiertes Bild in DB speichern im Web-Programmierung Forum

  1. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Registriert seit:
    05.01.2004
    Hallo,

    ich werkel schon den ganzen Tag dran rum, bekomm aber nichts funktionierendes hin:

    Es wird ein Bild hochgeladen und in die Datenbank gespeichert. Zusätzlich zu dem Bild wird auch noch eine Graustufen-Version gespeichert, die PHP automatisch aus dem vorhandenen Bild herstellt.

    Gelöst habe ich das so:
    PHP:
       for ($y 0$y <$img_height$y++) { 
           for (
    $x 0$x <$img_width$x++) { 
               
    $rgb imagecolorat($sourceImage$x$y);
               
    // … verschiedenste Operationen
               
    imagecolorallocate ($sourceImage$gray$gray$gray);
           }
       }

       
    $destinationImage ImageCreateTrueColor($img_width$img_height);
       
    imagecopy($destinationImage$sourceImage0000$img_width$img_height);

       
    // create file on disk
       
    imagejpeg($destinationImage$destinationFileName);
       
       
    // destroy temp image buffers
       
    imagedestroy($destinationImage);    
       
    imagedestroy($sourceImage);
    Problem ist, ich möchte nicht die Datei speichern, sondern das Bild in die Datenbank in ein BLOB stecken. Mit dem unveränderten Bild geht das einfach mit
    PHP:
    // read photo
            
    $tempFile fopen($tempFileName"r");
            
    $binaryPhoto fread($tempFilefileSize($tempFileName));
               
    // …
    mysql_query("INSERT INTO table (bild) VALUES ('$binaryPhoto')");
    Wie aber bekomme ich das von PHP generierte da rein? Danke!
     
    Zuletzt bearbeitet: 02.08.2005
  2. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    wieso geht das denn mit $destinationImage nicht auf die gleiche Weise? Wäre vielleicht interessant das zu wissen!
     
  3. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Registriert seit:
    05.01.2004
    imagejpeg() erstellt eine Datei aus der ersten Variable. Die zweite ist optional, wird sie weggelassen, bekommt man direkt den Stream. Ich konnte den aber noch nicht abfangen.

    Wie meinst Du das mit $destinationimage? Eine Datei erstellen, per fopen und fread lesen, Datei löschen und Gelesenes in die DB? Das wäre meine Notlösung, aber der Schritt (Datei erstellen, auslesen und löschen) ist ja eigentlich unnötig.

    Habe mit Bildern leider gar keine Erfahrung in der Hinsicht. Ich müsste wissen mit welcher Operation man eine binäre Version aus einem PHP-generierten Bild generiert.
     
    Zuletzt bearbeitet: 02.08.2005
  4. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    ich hab da auch keine Erfahrungen, einfach weil das beste DBMS für Bilder m.E. immer noch das Dateisystem ist. Aber Deine Frage war so nicht klar ( zumindest für mich). Hoffe Dir wird jetzt geholfen

    Gruß Karsten
     
  5. JohnP

    JohnP MacUser Mitglied

    Beiträge:
    471
    Zustimmungen:
    6
    Registriert seit:
    12.10.2004
    Probier mal das:
    // read photo
    $tempFile = fopen($destinationFileName, "r");
    $binaryPhoto = fread($tempFile, fileSize($destinationFileName));
    // …
    mysql_query("INSERT INTO table (bild) VALUES ('$binaryPhoto')");
     
  6. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    Registriert seit:
    31.01.2005
    Ich würde an Deiner Stelle auch die Bild-DB-Einträge lassen. Das nimmt viel zuviel Platz und vor allem Performance weg. Speichere den Originalnamen, die Extension (und meinetwegen den Pfad) in der DB und lies es aus dem Dateisystem des Rechners aus. So kann auch ein DB-Crash kaum die Daten anrühren und wer weiß, wie groß die Speicherung in der DB ist, anstatt auf dem Dateisystem.

    Für unique-Namen kannst Du z.B. einen Hashcode nehmen (z.B. über md5(time()); ). Damit verhinderst Du eben, dass jemand alte Bilder überschreibt oder neue nicht hochladen kann. Ein Bild aus der DB laden ist auf jeden Fall inperformanter, als ein auslesen der Dateinamen und Aufruf über das Dateisystem.
     
  7. michanismus

    michanismus MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    Registriert seit:
    23.08.2004
    Hast du schon ob_start() probiert?

    http://de2.php.net/ob_start

    Weiss jetzt nicht ob das auch für Streams hinhaut.

    Gruß, Micha
     
  8. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Registriert seit:
    05.01.2004
    Hallo, ich hab's nicht hinbekommen, ohne den Umweg über eine Datei zu gehen. Meine Lösung ist jetzt: Wie anfangs gezeigt eine Datei erstellen, diese auslesen, löschen und in die DB schreiben.

    In dem Fall hab ich mich für eine DB-Lösung mit Bildern entschieden, da es ein System ist, was kleine PDFs zur Verfügung stellt. Dazu gehören 2 Bilder, das PDF und Text. Jedes PDF mit allen Zusatzinfos ist eine Zeile in der DB-Tabelle und somit kann ich sehr einfach rumschieben, löschen und editieren. Der Performance-Unterschied ist nicht zu spüren, da es sehr wenige PDFs sind.
     
Die Seite wird geladen...
Ähnliche Themen - PHP generiertes Bild Forum Datum
Hochgeladenes Bild verzerren Web-Programmierung 04.09.2016
Werte der gleichen Schlüssel summieren (assoziativen Array) Web-Programmierung 25.08.2016
einfaches php. emailformular bei strato Web-Programmierung 08.08.2015
PHP Array in Google Maps Wegpunkte umwandeln Web-Programmierung 13.03.2015
PHP Update auf 5.6 im Terminal für Localhost (MAMP und Laravel) Web-Programmierung 12.09.2014

Diese Seite empfehlen

Benutzerdefinierte Suche