Jürgen: Bild mit PHP zu Laufzeit erstellen gibt header Fehler

Hallo,

ich habe da mal wieder eine frage:

ich habe eine ganz normale PHP-Seite, die auch Fehlerfrei angezeigt wird (bei IE und bei Mozilla). Nun wollte ich ein Bild zur Laufzeit mit Hilfe von PHP ändern, es speichern und dann auf der zuvor noch fehlerfreien Seite anzeigen.

Unter IE kein Thema, aber Mozilla gibt immer eine Fehlermeldung:

"The image http://www.fetenplaner.de/partyfotos/fotogross.php?bildnr=87&pfad=130902a&archive=partyarchive&nr=177&table=partyfotos cannot be displayed, because it contains errors."

Was hat das zu bedeuten. wenn ich nur das Bild generiere und anzeigen lasse, sonst aber alle Tags wie <html><body>,... rauslasse geht es?

Ich hatte mir überlegt, dass ich ja im Prinzip ein Frameset bauen kann, welches aus "oben" mit 0 Pixeln und "unten" mit * Pixeln besteht. Die Seite "oben" würde das Bild generieren und die Seite "unten" würde das anzeigen. Prob ist aber, dass zum Teil die Seite "unten" zu schnell geladen wird und somit das Bild noch nicht erstellt und gespeichert ist.

Wie kann man sowas denn anders und eleganter lösen?

Danke für die Hilfe

  1. Moin!

    Unter IE kein Thema, aber Mozilla gibt immer eine Fehlermeldung:

    "The image http://www.fetenplaner.de/partyfotos/fotogross.php?bildnr=87&pfad=130902a&archive=partyarchive&nr=177&table=partyfotos cannot be displayed, because it contains errors."

    Was machst du denn, um das Bild zu generieren? Ist dir klar, dass du so ein Bild unabhängig von irgendeiner Seite mit <img> einbinden mußt, und dass das auf diese Weise aufgerufene PHP-Skript nur ordentliche Bilddaten liefern darf, und sonst nichts?

    Ich hatte mir überlegt, dass ich ja im Prinzip ein Frameset bauen kann, welches aus "oben" mit 0 Pixeln und "unten" mit * Pixeln besteht. Die Seite "oben" würde das Bild generieren und die Seite "unten" würde das anzeigen. Prob ist aber, dass zum Teil die Seite "unten" zu schnell geladen wird und somit das Bild noch nicht erstellt und gespeichert ist.

    Vollkommen unnötig und sinnlos.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. hallo,

      ich generiere das bild wie folgt:

      <?
      header("Content-type:  image/jpeg");

      $str="http://www.***.de";
      $datei="../zeigebild/bild"."_"."$userid"."_"."$bild_name_zusatz".".jpg";

      $foto="$bildnr"."_JPG.jpg";
      $bild="../$archive/$pfad/Bilder/$foto";

      $vorhanden=file_exists("$bild");
      if ($vorhanden){
      $altes_bild=imagecreatefromjpeg($bild);
      $hoehe=imagesy($altes_bild);
      $breite=imagesx($altes_bild);
      if ($breite > $hoehe) {
      $img=imagecreatetruecolor(400,300);
      imagecopyresized($img,$altes_bild,0,0,0,0,401,301,$breite,$hoehe);
      } else {
      $img=imagecreatetruecolor(300,400);
      imagecopyresized($img,$altes_bild,0,0,0,0,301,401,$breite,$hoehe);
      }

      $text_color=ImageColorAllocate ($img, 255, 255, 255);

      $unten="$str";
      $oben="$datum $namen";
      $hoehe=imagesy($img);
      $breite=imagesx($img);

      $x=$breite-180;
      $y=$hoehe-20;
      imagestring($img,2,$x,$y,$unten, $text_color);
      imagestring($img,2,10,10,$oben, $text_color);
      imagejpeg($img,($datei));
      imagedestroy($img);

      ?>

  2. Hallo,

    "The image http://www.fetenplaner.de/partyfotos/fotogross.php?bildnr=87&pfad=130902a&archive=partyarchive&nr=177&table=partyfotos cannot be displayed, because it contains errors."

    http://www.fetenplaner.de/partyfotos/fotogross.php?bildnr=87&pfad=130902a&archive=partyarchive&nr=177&table=partyfotos
    http://www.fetenplaner.de/partyfotos/fotogross.php?bildnr=87

    liefern beide einen HTTP-Head mit

    Content-Type: image/jpeg

    aber dann schicken sie JavaScript-Code:

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    <!--
    var newWin = null;
    function foto_gross(loc) {

    u.s.w.

    Also mach, dass das PHP-Skript effektiv ein Bild liefert,
    wenn Du ein Bild meinst.

    Ich hatte mir überlegt, dass ich ja im Prinzip ein Frameset bauen kann [...]

    Um Gottes Willen keine Frames!

    Behebe das Problem - liefere richtige Bilder aus.

    Wenn es in zwei Zeiten geschehen muss, mach halt
    eine "Vorschaltseite", die das Bild generiert, und
    dann dort einen Link (und ggf. ein META-Redirect)
    auf die Seite, die das Bild einbettet.

    Gruesse,

    Thomas

    1. also darf ich nachdem ich das bild generiert habe keine javascripts aufrufen?

      1. Moin!

        also darf ich nachdem ich das bild generiert habe keine javascripts aufrufen?

        Nein.

        Du hast ein Verständnisproblem.

        Ein generiertes Bild ist nichts anderes als ein auf dem Server als Datei abgelegtes Bild.

        Du rufst es mit <img src="bildurl"> auf und bindest es in die Seite ein. Der Browser empfängt dann alle Daten, die das Bild ausmachen - ob nun aus der Datei oder generiert - egal.

        Du mußt dich in pro Skript entscheiden: Entweder HTML, CSS und Javascript generieren, oder ein Bild. NICHT MISCHEN!

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
        1. aaahhh, ok geht. vielen dank.

          es lag also daran, dass ich zwei headers gesendet habe!?

          1. Hallo,

            es lag also daran, dass ich zwei headers gesendet habe!?

            Nein, Du willst mit dem Skript wohl zuviel auf einmal.

            Es wird sowieso nur ein Content-Type Header geschickt,
            naemlich der zuletzt definierte.

            ---

            Ich wuerde zwei Skripts machen.
            Dann verschwindet auch Dein Missverstaendnis.

            bild.php
            Liefert die Bilder aus
            Content-Type: image/jpeg

            album.php
            Liefert HTML-Code (und evtl. JavaScript-Code) aus.
            Content-Type: text/html

            Dort bindest Du die Bilder dann normal mit IMG-Tags ein:
            <img src="bild.php?parameter=...">

            Gruesse,

            Thomas