tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
133
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Microhome
    Microhome Microhome ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    Berlin
    Beiträge
    351
    Moin moin,
    ich hab in einer Datenbank 10.000 Einträge stehen, welche jeweils einer x- und einer y-Koordinate zugeordnet sind. Nun möchte ich aus diesen Farben ein Bild erzeugen. Das Problem liegt darin, dass es ewig dauert dieses zu generieren. Habt ihr eine Idee, wie ich das ganze verkürzen kann, bzw. ob das Generieren mit Ruby oder Pyhton schneller gehen würde?!

    Hier ein Codeauszug:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    $img = @imagecreatetruecolor(100,100);
    for ($y = 0; $y < 100; $y++) {
            for ($x = 0; $x < 100; $x++) {
                    $res = mysql_query("SELECT color FROM griddata WHERE x LIKE \"$x\" AND y LIKE \"$y\" LIMIT 1");
                    $check = mysql_fetch_object($res);
                    $farbe = $check->color;
                    imagefilledrectangle($img, $x, $y, $x+1, $y+1, $farbe);
            }
    }
    header("Content-type: image/jpeg");
    imagejpeg($img, "aktuell.jpg");


    Vielen Dank!
    m!crohome
     
    Lösungsvorschlag:
    Wenn es mit dem mysql_query(...); Probleme gibt, pack ein die(mysql_error()); dahinter und guck dir den MySQL-Fehler an!

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Probier’s mal mit der imagesetpixel()-Funktion. Außerdem solltest du nicht jeden Datensatz einzeln abfragen sondern beispielsweise zeilenweise.
     
    Markus Wulftange

  3. #3
    Avatar von Microhome
    Microhome Microhome ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    Berlin
    Beiträge
    351
    Hi Gumbo,
    ersteinmal vielen Dank für deine Hilfe. Wie genau meinst du das mit den zeilenweisen Abfragen? Ich glaube, dass vorallem die Abfragen so lang dauern und weniger das Erstellen des neuen Bildes...
     
    Lösungsvorschlag:
    Wenn es mit dem mysql_query(...); Probleme gibt, pack ein die(mysql_error()); dahinter und guck dir den MySQL-Fehler an!

  4. #4
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Deswegen ja der Vorschlag, die Informationen der Grafik zeilenweise abzufragen (eine Pixelgrafik besteht ja auch aus Zeilen und Spalten).
     
    Markus Wulftange

  5. #5
    Avatar von Microhome
    Microhome Microhome ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    Berlin
    Beiträge
    351
    Ja, nur wie?
    Außerdem habe ich noch folgendes Phänomen festgestellt. Die PHP Datei führe ich über die Kommandozeile auf meinem Hosteurope VServer aus. Komischerweise benötigt das erste Ausführen des Scripts immer wesentlich länger als die darauffolgenden. Hier im Beispiel mit 90x90 Pixeln:

    1. Mal:
    > php createpic.php
    Ausführungsdauer: 108.922474146 Sekunden

    2. Mal:
    > php createpic.php
    Ausführungsdauer: 5.92906403542 Sekunden


    Woran kann das liegen?
     
    Lösungsvorschlag:
    Wenn es mit dem mysql_query(...); Probleme gibt, pack ein die(mysql_error()); dahinter und guck dir den MySQL-Fehler an!

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Vielleicht werden die Ergebnisse im Cache zwischengespeichert.

    Probier mal Folgendes:
    PHP-Code:
    $img imagecreatetruecolor(100,100);
    for (
    $y 0$y 100$y++) {
        
    $res mysql_query("SELECT x, color FROM griddata WHERE y = $y ORDER BY x");
        while (
    $pixel mysql_fetch_assoc($res)) {
            
    imagesetpixel($img$pixel['x'], $y$pixel['color']);
        }
    }
    header("Content-type: image/jpeg");
    imagejpeg($img"aktuell.jpg"); 
     
    Markus Wulftange

  7. #7
    Avatar von Microhome
    Microhome Microhome ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    Berlin
    Beiträge
    351
    Hmm das scheint irgendwie nicht zu funktionieren. Das Script läuft und läuft aber kommt nicht zum Ende. Hab es mal mit 10x10 Pixeln versucht, aber auch da bekomme ich kein Ergebnis.

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    $img = imagecreatetruecolor(10,10);
    for ($y = 0; $y < 10; $y++) {
        $res = mysql_query("SELECT x, color FROM griddata WHERE y LIKE \"$y\" ORDER BY x ASC");
        while ($pixel = mysql_fetch_assoc($res)) {
            imagesetpixel($img, $pixel['x'], $y, $pixel['color']);
        }
    }
     
    Lösungsvorschlag:
    Wenn es mit dem mysql_query(...); Probleme gibt, pack ein die(mysql_error()); dahinter und guck dir den MySQL-Fehler an!

  8. #8
    Avatar von Microhome
    Microhome Microhome ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    Berlin
    Beiträge
    351
    Keiner mehr 'ne Idee
     
    Lösungsvorschlag:
    Wenn es mit dem mysql_query(...); Probleme gibt, pack ein die(mysql_error()); dahinter und guck dir den MySQL-Fehler an!

  9. #9
    Avatar von hubbl
    hubbl hubbl ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    221
    Versuche irgendwie die Fehlerquelle genauer zu lokalisieren.

    Führe den Query doch erstmal aus und speichere alles in ein 2 Dimensionales Array.
    Schau dir das Array mit var_dump(); an und check ob es geklappt hat.

    Dann geh die Schleife ohne imagesetpixel durch und geb dir die Daten so aus, um sicherzustellen, dass das auch so klappt.

    Wenn du dir dann sicher bist das alles so ist wie es sein sollte damm mach es mit imagesetpixel.
    Führe das Script vllt auch mal bei dir Lokal aus und setze die max_execution time höher.

    Wenn ich einen Fehler entdecke versuche ich immer erst einmal solch einen Weg um zu sehen was falsch ist.
     
    Meine Wenigkeit auf Deviantart

Ähnliche Themen

  1. email mit bild per php generieren.
    Von macropode im Forum PHP
    Antworten: 1
    Letzter Beitrag: 19.12.07, 19:07
  2. Bild upload -> größe neu generieren
    Von fischair im Forum PHP
    Antworten: 1
    Letzter Beitrag: 14.08.04, 12:56
  3. Antworten: 1
    Letzter Beitrag: 20.09.03, 18:35
  4. Bild mit dynamischen Daten generieren - aber wie?
    Von Muffinmampfer im Forum PHP
    Antworten: 14
    Letzter Beitrag: 09.07.03, 14:58
  5. bild generieren duch eingabemaske.
    Von cRaZe im Forum PHP
    Antworten: 6
    Letzter Beitrag: 03.02.03, 13:25