T-Rex: PHP Script als Bild ausliefern

Moin,

da gibts so ein PHP Script. Das Script kann je nach Übergabeparameter Bilddaten laden (, verarbeiten) und wieder ausgeben. Also es kann ein Bild was auf dem Webserver ist laden und dann wieder ausgeben. Dazwischen wird das Bild eventuell verändert (sonst würde die Komplexität keinen Sinn machen)
Dabei wird z.B. header ("Content-type: image/png"); gesetzt. Das Bild wird ausgegeben und auch richtig angezeigt.

Im Firefox kann man Bilder speichern in dem man sie von der Webseite und in ein Verzeichnis zieht. Also per Drag & Drop.
Wenn ich das jetzt mit meinem Bild was über php läuft mache, dann bekomme ich eine Datei mit 0 KB. Das würde auch erklären wieso das Bild nicht gecachet wird. Es wird immer wieder neu angefordert.

Vor langer langer Zeit hat mir jemand mal ein ähnliches Script gezeigt. Dort war der header aber nicht image/png (oder jpg oder gif) sondern anders (ich glaube text/txt oder sowas. Als ich ihn drauf ansprach wieso er so einen komischen header setzt sagte er, er weiß es nicht mehr genau, aber damit stellt er sicher dass man das Bild speichern kann. Ich glaube er hat damals mein heutiges Problem irgendwie umgangen behoben.

Kontakt zu ihm ist abgebrochen, das script von ihm hab ich nicht. Deshalb wende ich mich an euch.

Gruß
bildhaft schöner
T-Rex

  1. Achja nachtrag...
    wenn ich das "Bild speichern unter", dann wird das Bild als "bildname.png.jpg" gespeichert, obwohl es ein png ist. Jedoch kann ich es auf diesem Weg speichern.

    und nochwas
    Hab ein kleines Script zum testen geschrieben:

    header("Content-type: image/png");
    imagepng( imagecreatefrompng( "nav_logo86.png" ) );

    Manche Bilder kann ich per Drag&Drop runter laden andere nicht...
    Ich hab keine Ahnung wieso...
    Achja es handelt sich immer um png's

    Gruß
    ratlose
    T-Rex

    1. Hello,

      Hab ein kleines Script zum testen geschrieben:

      header("Content-type: image/png");

      imagepng( imagecreatefrompng( "nav_logo86.png" ) );

      Manche Bilder kann ich per Drag&Drop runter laden andere nicht...

      Wenn man Funktionen schachtelt, sollte man einen alternativen Weg suchen, Fehler zu erkennen, wenn die Funtionen nicht eigensicher sind.

      Wenn die Funktionen eigensicher sind (es wird grundsätzlich auf passende Typen und Anzahl bei den Argumenten geprüft), dann müsstge zum Schluss zumindest ein "false" herauskommen.

      Ob es nun sinnvoll ist , aienh "false" an die Strandardausgabe auszugeben (in PHP ergibt das dann <gar nix> ), das kannst Du dir selber mal überlegen.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. da gibts so ein PHP Script. [...] Dabei wird z.B. header ("Content-type: image/png"); gesetzt. Das Bild wird ausgegeben und auch richtig angezeigt.
    Im Firefox kann man Bilder speichern in dem man sie von der Webseite und in ein Verzeichnis zieht. Also per Drag & Drop.
    Wenn ich das jetzt mit meinem Bild was über php läuft mache, dann bekomme ich eine Datei mit 0 KB. Das würde auch erklären wieso das Bild nicht gecachet wird.

    Vergleiche die Header(z.B. via Firefox Plugin HttpFox) der statischen Version mit der dynamischen.

  3. Lieber T-Rex,

    Dabei wird z.B. header ("Content-type: image/png"); gesetzt. Das Bild wird ausgegeben und auch richtig angezeigt.

    ist das der einzige Header, den Du aktiv von Deinem Script ausgeben lässt? Neben dem content-type gebe ich immer auch content-disposition und content-length an. Im PHP-Handbuch steht auch was: header()

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
  4. Hey T-Rex,

    Vor langer langer Zeit hat mir jemand mal ein ähnliches Script gezeigt. Dort war der header aber nicht image/png (oder jpg oder gif) sondern anders (ich glaube text/txt oder sowas.

    ich bin mir nicht sicher, aber könnte da Content-Type: application/octet-stream im Spiel gewesen sein?

    Gruß, Dennis

  5. Hi,

    da gibts so ein PHP Script.

    „Gibt es das nicht immer …“

    Das Script kann je nach Übergabeparameter Bilddaten laden (, verarbeiten) und wieder ausgeben. Also es kann ein Bild was auf dem Webserver ist laden und dann wieder ausgeben. [...]

    Im Firefox kann man Bilder speichern in dem man sie von der Webseite und in ein Verzeichnis zieht. Also per Drag & Drop.
    Wenn ich das jetzt mit meinem Bild was über php läuft mache, dann bekomme ich eine Datei mit 0 KB. Das würde auch erklären wieso das Bild nicht gecachet wird. Es wird immer wieder neu angefordert.

    Selbstverständlich wird es nicht gecached – das werden von PHP-Scripten ausgegebene Daten per Default nie.

    Wenn du in diesem Umfeld Caching haben willst, dann musst du dich selbst aktiv darum kümmern.

    Vor langer langer Zeit hat mir jemand mal ein ähnliches Script gezeigt. Dort war der header aber nicht image/png (oder jpg oder gif) sondern anders (ich glaube text/txt oder sowas. Als ich ihn drauf ansprach wieso er so einen komischen header setzt sagte er, er weiß es nicht mehr genau, aber damit stellt er sicher dass man das Bild speichern kann.

    Ziemlicher Nonsense.

    Kontakt zu ihm ist abgebrochen

    Sei froh, dass du das jetzt nicht mehr explizit machen musst :-)

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. An Dieser Stelle wollte ich noch meine Lösung vorstellen.
      ChristB du hattest absolut recht, den Cache muss man explizit setzen.

      header("Last-Modified: ".objImage->lastModifiedFromImage();
      header("Pragma: cache");
      header("Cache-Control: store, cache");

      Dadurch funktioniert der Cache.
      Was jedoch nicht funktioniert ist, dass das Bild per Drag&Drop auf den Desktop verschoben werden kann. Das ist aber unerheblich. Man kann das Bild mittels "speichern unter" ja trotzdem speichern, dass reicht vollkommen.

      Danke an alle für eure Hilfe!

      Gruß
      cache
      T-Rex