schildi: mit gd2lib erzeugte bilder als objekt im speicher halten

Gibt es ne Möglichkeit mithilfe der GD 2.0 Bibliothek erzeugte Bilder im Speicher zu halten um diese bei Bedarf aus nem HTML Kontext heraus per PHP abzurufen?
Ich möchte vermeiden, dass die Bilder bei jeder Darstellung im Browser neu erzeugt werden müssen (hohe Prozessorbelastung)

Wäre super, wenn da jemand helfen könnte!!!

Danke im voraus!

  1. Hallo schildi,

    Gibt es ne Möglichkeit mithilfe der GD 2.0 Bibliothek erzeugte Bilder im Speicher zu halten um diese bei Bedarf aus nem HTML Kontext heraus per PHP abzurufen?

    Was unten steht, ist unabhängig von der Versionsnummer der GD. Und Festplattenspeicher ist auch Speicher.

    Ich möchte vermeiden, dass die Bilder bei jeder Darstellung im Browser neu erzeugt werden müssen (hohe Prozessorbelastung)

    Falls Du Hauptspeicher meinst, durchforste das </archiv/> nach Speicherproblemen bei PHP und Bildverarbeitung. Du wirst fündig werden.

    Speichere deswegen die Bilder in einem Verzeichnis Deiner Wahl auf dem Server :-)

    Logik ungefähr so:

    Wenn angefordertes Bild nicht im Verzeichnis vorhanden
        Erstelle das Bild
        Speichere es ab
      ende wenn
      Liefere abgespeichertes Bild zurück

    Freundliche Grüsse,

    Vinzenz

    1. Danke Vinz,

      Ich meinte schon Hauptspeicher.
      Aber vielleicht sollt ichs echt einfach auf die platte speichern...

      1. An dieser Stelle hätt ich noch ne Frage.

        Wie erstelle ich ein transparentes bild mit gd2(png)?

        1. Hallo schildi,

          Wie erstelle ich ein transparentes bild mit gd2(png)?

          Das Handbuch weiß eine Antwort, lies http://www.php.net/manual/de/function.imagecolortransparent.php.

          Freundliche Grüsse,

          Vinzenz

          PS: Hast Du verstanden, warum Du die Festplatte als Speicher nutzen sollst, was wahsaga und ich Dir nahegelegt haben?

          1. klar. problem ist - ich bin überhaupt garnicht auf die idee gekommen, dass ich die bilder ja einfach auf der platte ablegen kann (hirnblock...)

            habs jetzt au so gemacht.

            was die transp. angeht hab ich schon damit rumprobiert, hat nur irgendwie net geklappt. naja. ich werd nochmal rumtesten.

            danke in jedem falle!

            1. function symbolize_1x1_spacer($bgcolor)
              {
              $width = 1;
              $height = 1;
              $img = imagecreatetruecolor($width,$height);
              $bgcolor = imagecolorallocate($img, $bgcolor[0], $bgcolor[1], $bgcolor[2]);
              imagefill($img, 0, 0, $bgcolor);
              imagecolortransparent($img, $bgcolor);
              imagesetpixel($img,0,0,$bgcolor);
              return $img;
              }

              als farbe übergeb ich weiss.
              also:

              $bgcolor = array(255,255,255);
              $i = symbolize_1x1_spacer($bgcolor);
              imagepng($i,"test.png");

              ne ahnung wo der fehler steckt? ich grieg immer ein schwarzes bild ;(

              1. FEHLER GEFUNDEN!!

                man darf das bild nicht in truecolor erstellen.
                also statt:
                $img = imagecreatetruecolor($width,$height);
                den hier verwenden:

                $img = imagecreate($width,$height);

                1. Moin!

                  FEHLER GEFUNDEN!!

                  man darf das bild nicht in truecolor erstellen.
                  also statt:
                  $img = imagecreatetruecolor($width,$height);
                  den hier verwenden:

                  $img = imagecreate($width,$height);

                  So. Oder auf imagecolorallocate verzichten. Weil das nämlich nur bei 256-Farben-Bildern verwendet wird, nicht bei Truecolor-Bildern.

                  Entweder hast du ein 256-Farben-Bild. Dann machst du imagecolorallocate, diese Funktion gibt dir einen Farbindex (Wert 0..255) zurück, und den übergibst du als Farbe an alle zeichnenden Funktionen.

                  Oder du hast ein Truecolor-Bild, dann übergibst du direkt allen zeichnenden Funktionen einen 3-Byte-Farbwert RGB. Und dann klappts auch mit dem Einfärben.

                  Weiß würdest du beispielsweise als "0xFFFFFF" übergeben. Diese Zahl "0xFFFFFF" ist eine reguläre, aber eben hexadezimale Zahl. Genausogut könntest du ihren Dezimalen Wert (den ich jetzt hier nicht ausrechnen werde) nehmen. Bei Schwarz ist es einfacher: Entweder "0" nehmen, oder hexadezimal "0x000000" - bleibt sich gleich.

                  Dein imagecolorallocate hat als Rückgabewert 0 oder 1 ergeben - das ist in Truecolor eben schwarz oder supersuperdunkles schwarz-blau (0x000001).

                  Ach ja: Wenn du RGB in drei verschiedenen Variablen hast:

                  Farbe = 256 * 256 * R + 256 * G + B

                  - Sven Rautenberg

  2. hi,

    Ich möchte vermeiden, dass die Bilder bei jeder Darstellung im Browser neu erzeugt werden müssen (hohe Prozessorbelastung)

    der dafür vorgesehene speicher nennt sich festplatte.

    gruss,
    wahsaga