Stefan Einspender: mehrere Bilder zusammenfügen

Hallo ForumsleserInnen,

wie kann ich mit PHP mehrere Bilder zu einem Bild zusammenfügen?
 ___    ___
|   |  |   |
|___|  |___|
 ___    ___
|   |  |   |
|___|  |___|

wird zu

______
|      |
|      |
|      |
|______|

Hat da jemand eine Idee, ein Verweis auf eine Funktion in PHP, die
so etwas ermöglicht, reicht mir schon aus.

Viele Grüße,
Stefan

  1. Hi Ste*Patchwork*fan,

    wie kann ich mit PHP mehrere Bilder zu einem Bild zusammenfügen?
     ___    ___
    |   |  |   |
    |___|  |___|
     ___    ___
    |   |  |   |
    |___|  |___|

    wird zu
     ______
    |      |
    |      |
    |      |
    |______|

    Hat da jemand eine Idee, ein Verweis auf eine Funktion in PHP, die
    so etwas ermöglicht, reicht mir schon aus.

    Pah, PHP... Mit float: bekommst du es sogar hin, dass sich das Bild der Fenstergröße anpasst ;-)

    Grüße,
     Ro*SCNR*land

    --
    http://my.opera.com/dev/articles/20030519/
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    selfcode = ss:| zu:} ls:} fo:} de:> va:} ch:| sh:) n4:& rl:| br:< js:{ ie:{ fl:{ mo:|
    1. Hallo Roland,

      Hi Ste*Patchwork*fan,

      ^^^^^^^^^

      Pah, PHP... Mit float: bekommst du es sogar hin, dass sich das Bild der Fenstergröße anpasst ;-)

      gut, dann kurze Rechnung ... durch den Spiegel-Artikel sind etwa
      20.000 Besucher zusätzlich auf meine Website gekommen, macht dann
      bei 768 einzelnen Grafiken + HTML-Datei jedesmal 769 Einträge [1],
      summa summerum einen Logfile von mehr als 3 GB (unkomprimiert) und
      mit 15.380.000 Zeilen, wie soll ich den auswerten? ;-)

      Ich habe gerade http://php.net/imagecopy entdeckt, könnte die Lösung
      sein. Wenn jemand etwas Besseres weiß oder mir ein Übungsbeispiel [2]
      schreibt, bin ich natürlich auch nicht böse ;-)

      Viele Grüße,
      Stefan

      [1] Viele Computer werden allerdings während des Ladevorganges in
          die Knie gehen, ist auch abhängig vom verwendeten Browser. Ich
          habe mir schon Probleme, wenn ich derzeit die Gesamtgrafik er-
          stelle (Screenshot im MSIE-Vollbildmodus), deshalb suche ich
          nach einer besseren Variante.

      [2] Werde bestimmt irgendwo etwas finde, wo schonmal jemand diese
          Funktion angewendet hat. Wenn es eine bessere Möglichkeit gibt,
          dann dürft Ihr die mir gern verraten ;-)

      1. Hi Stefan,

        gut, dann kurze Rechnung ... durch den Spiegel-Artikel sind etwa
        20.000 Besucher zusätzlich auf meine Website gekommen,

        ich wünsche dir, dass das noch öfter passiert, würde aber von den Besucherzahlen davor ausgehen. Abgesehen davon warten Modembesitzer bei einem fast 0.5MB großen Bild *sehr* lange. Allerdings ist der HTTP-Overhead bei so vielen Bildern wahrscheinlich größer, als das aktuelle Bild selbst. Also: [GENEHMIGT]

        macht dann
        bei 768 einzelnen Grafiken + HTML-Datei jedesmal 769 Einträge [1],
        summa summerum einen Logfile von mehr als 3 GB (unkomprimiert) und
        mit 15.380.000 Zeilen, wie soll ich den auswerten? ;-)

        Tsts, wenn ich nach einem Tool zur Logfile-Analyse suche, warum lese ich dann immer wieder deinen Namen? ;-)

        Grüße,
         Roland

        --
        http://my.opera.com/dev/articles/20030519/
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        selfcode = ss:| zu:} ls:} fo:} de:> va:} ch:| sh:) n4:& rl:| br:< js:{ ie:{ fl:{ mo:|
  2. Moin!

    wie kann ich mit PHP mehrere Bilder zu einem Bild zusammenfügen?

    Mit imagecopy*()

    Hat da jemand eine Idee, ein Verweis auf eine Funktion in PHP, die
    so etwas ermöglicht, reicht mir schon aus.

    Du brauchst die gdlib und benutzt dann einfach die von ihr angebotenen Funktionen.

    Grob als Orientierung: Du legst ein Ziel-Bild an, welches in der Größe alle zusammenzufügenden Bilder aufnehmen kann. Dann öffnest du jeweils die einzelnen Quell-Bilder und kopierst sie ins Ziel-Bild hinein. imagecopy() oder imagecopyresized() bzw. imagecopyresampled() sollten das prima erledigen können.

    Für die korrekte Positionierung der Bilder im Zielbild bist du selbst verantwortlich. :)

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hallo Sven,

      Mit imagecopy*()

      <?PHP
      $favicon = imagecreatefrompng("favicon.png");
      $patchwork = imagecreatefrompng("patchwork.png");
      imagecopy($patchwork,$favicon,0,0,0,0,32,32);
      imagepng($patchwork,"patchwork.png");
      ?>

      ist mein Beispiel, nur basiert dann patchwork.png immer auf den 256
      websicheren Farben, was ich natürlich nicht will. Wie kann ich das
      Problem umgehen? Ist womöglich http://php.net/imagecreatetruecolor
      die Lösung? Wenn ja, gibt es eine Alternative, weil ich keine GD
      2+ zur Verfügung habe?

      Für die korrekte Positionierung der Bilder im Zielbild bist du selbst verantwortlich. :)

      Ja, sollte kein Problem sein. Nur wenn obengen. Sache nicht lösbar
      ist, nutzt mir der ganze Kram nix ;-)

      Viele Grüße,
      Stefan

      1. Moin!

        <?PHP
        $favicon = imagecreatefrompng("favicon.png");
        $patchwork = imagecreatefrompng("patchwork.png");
        imagecopy($patchwork,$favicon,0,0,0,0,32,32);
        imagepng($patchwork,"patchwork.png");
        ?>

        ist mein Beispiel, nur basiert dann patchwork.png immer auf den 256
        websicheren Farben, was ich natürlich nicht will.

        Nein, nicht 256 websichere Farben werden genommen, sondern die Palette des ersten Bildes (bzw. das, in das hinein du den Rest kopierst).

        Wie kann ich das Problem umgehen? Ist womöglich http://php.net/imagecreatetruecolor
        die Lösung? Wenn ja, gibt es eine Alternative, weil ich keine GD
        2+ zur Verfügung habe?

        imagecreatetruecolor ist in der Tat die Lösung. Die gdlib kann leider in Version 1.x noch nicht mit True Color umgehen, das kam IIRC erst mit Version 2. Diese ist zum Glück mit PHP 4.3.x gebundelt - das einzelne Installieren aus dem Source war nämlich nicht ganz so trivial.

        Alternativen gibts da leider irgendwie keine - jedenfalls nicht mit der gdlib. Wenn du hast oder installieren kannst, wäre ImageMagick noch eine Idee.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hallo Sven,

          Nein, nicht 256 websichere Farben werden genommen, sondern die Palette des ersten Bildes (bzw. das, in das hinein du den Rest kopierst).

          komisch, bei mir hat er da immer alle Farben genommen, nur eben
          dieser websicheren Farbpalette angeglichen. Wenn ich also ein
          komplett grünes in ein komplett rotes Bild reinkopiere, ist in der
          Palette nur rot und grün. Wenn ich da ein Foto reinkopiere, wird
          die Palette angepasst, nur eben nach wie vor ausschließlich web-
          sichere Farben, was dann nicht so dolle ausschaut :-/

          Naja, ist letztendlich egal, weil diese Variante taugt nix für mich.

          Diese ist zum Glück mit PHP 4.3.x gebundelt

          Hm ... ich werde mal bei 1&1 anrufen, ob dieser Wechsel vielleicht
          demnächst angedacht ist, da brauche ich nicht unnötig noch einer
          Alternative suchen.

          Wenn du hast oder installieren kannst, wäre ImageMagick noch eine Idee.

          Gute Idee, gibt es ja afaik auch für Windows, da schaue ich mal.

          Danke & Viele Grüße,
          Stefan