Bernhard Schussek: Variable Gifs? (Zufallsprinzip)

Hallo,

Ich weiß dass es da einen Weg gibt, Gifs zu machen, die sich nach Zufall auf ein anderes Gif in einem Ordner weiterleiten
Dieses "Weiterleitungs-Gif", nennen wir es "zufall.gif" wird auch als .gif gespeichert, wodurch der Browser glaubt, dass er nach wie vor zufall.gif und nicht eins der Bilder aus dem Ordner anzeigt

Hier ein Beispiel, jedes Mal beim Reload wird ein anderes Bild angezeigt

Hat irgendwer eine Ahnung wie man sowas machen kann?

  1. Hallo,

    Hier ein Beispiel, jedes Mal beim Reload wird ein anderes Bild angezeigt

    Es ist nicht sehr fair, Bilder von fremden Servern
    hier in der Sig. einzubinden.

    Hat irgendwer eine Ahnung wie man sowas machen kann?

    Das hat nichts mit Grafik/GIF zu tun, sondern mit dem Server,
    der bei der gleichen URL zeitabhaengig bzw. nach Zufallsprinzip
    verschiedene Bilder ausliefert.

    Spontan faellt mir ein "Durchschleuser"-Skript mit PHP ein;
    es gibt sicher zahlreiche Alternativen.
    Wenn Du sowas basteln willst, solltest Du uns mal sagen,
    welchen Server mit welchen Technologien Du zur Verfuegung hast.

    Gruesse,

    Thomas

    --
    Dank /my/ automatisch ausgeblendet: JavaScript, ASP.
    Manuell "ausgeblendet": Threads mit Frames, Iframes und Scrollbalken im Subject...
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
  2. hi,

    Ich weiß dass es da einen Weg gibt, Gifs zu machen, die sich nach Zufall auf ein anderes Gif in einem Ordner weiterleiten

    das geht vielleicht mit einem script, aber nicht mit einem gif. gif ist ein grafik-format, dass kennt ganz bestimmt keine "befehle" in irgendeiner art, die bei dieser aufgabe weiterhelfen würden.

    Dieses "Weiterleitungs-Gif", nennen wir es "zufall.gif" wird auch als .gif gespeichert, wodurch der Browser glaubt, dass er nach wie vor zufall.gif und nicht eins der Bilder aus dem Ordner anzeigt

    ob das script unter .gif, .php, .pl oder .hanswurst gespeichert wird, hat den browser absolut nicht zu interessieren - einzig und allein wichtig ist, was das script zurückgibt. dies müsste in diesem alle entweder ein entsprechender content-type-header für das gif-format, gefolgt von den binären bilddaten, oder aber ein HTTP-statuscode, der die "weiterleitung" auf das richtige bild veranlasst, sein.

    Hier ein Beispiel, jedes Mal beim Reload wird ein anderes Bild angezeigt

    http://koti.mbnet.fi/kegetys/flashpoint/test.gif
    das dies kein "richtiges" gif ist merkt man eigentlich schon daran, dass der browser beim direkten aufruf über die adresszeile einen slash dahinter setzt ;-)

    Hat irgendwer eine Ahnung wie man sowas machen kann?

    wie ich oben schon sagte, mache ein script, das entweder den passenden content-type-header gefolgt von den bild-daten, oder aber einen redirect auf ein zufällig ausgewähltes bild ausgibt.

    gruss,
    wahsaga

    1. ob das script unter .gif, .php, .pl oder .hanswurst gespeichert wird, hat den browser absolut nicht zu interessieren - einzig und allein wichtig ist, was das script zurückgibt. dies müsste in diesem alle entweder ein entsprechender content-type-header für das gif-format, gefolgt von den binären bilddaten, oder aber ein HTTP-statuscode, der die "weiterleitung" auf das richtige bild veranlasst, sein.

      mache ein script, das entweder den passenden content-type-header gefolgt von den bild-daten, oder aber einen redirect auf ein zufällig ausgewähltes bild ausgibt.

      Das mit dem Skript habe ich schon versucht, und zwar folgendes:

      <?php
       $bilder=array("av1.gif","av2.gif");
       srand ((double)microtime()*1000000);
       $i=rand(0,1);
       $bild=imagecreatefromgif($bilder[$i]);
       header("Content-Type: image/gif");
       imagegif($bild);
      ?>

      Aber wenn ich das als *.gif abspeichere, wird mir beim Ausführen der Text des Skripts angezeigt, es funktioniert auch nicht, wenn ich als Array-Index 0 oder 1 einsetze statt $i

      Ich hätte diesen Post nicht gemacht, hätte ich nicht gelesen, das jemand soetwas mit Photoshop bewerkstelligt hätte, war aber vielleicht nur ein Witz...

      1. Hallo,

        $bild=imagecreatefromgif($bilder[$i]);
         header("Content-Type: image/gif");
         imagegif($bild);

        Es hat niemand gesagt, dass Du jedesmal ein neues Bild
        _erzeugen_ sollst. Das ist IMHO Ressourcenverschwendung.
        Kommt dazu, dass GIF-Erzeugung bei den meisten modernen
        PHP- bzw. GD-Versionen gar nicht funktioniert...

        Was ich mit "Durchschleuser"-Skript meinte ([pref:t=68865&m=395619]),
        siehst Du hier:
        http://forum.de.selfhtml.org/archiv/2003/11/62399/

        Die Alternative waere, wie wahsaga schrieb,
        dass das PHP-Skript zufallsbedingt einen
        HTTP-302-Header schickt, was den Browser
        an die URL eines zufaelligen, statischen
        Bildes weiterleitet.

        Beispiel:

        if ($zufallszahl<0.5)
          { $zielbild="bild1.gif"; }
        else
          { $zielbild="bild2.jpg"; }
        $bildurl="http://www.example.com/bildverzeichnis/$zielbild";

        header("Location: $bildurl");

        Lies:
        http://www.php.net/manual/de/function.header.php

        Lies unbedingt auch:
        http://www.dclp-faq.de/q/q-fehler-header.html
        Und wehe, Du wagst es, hier zu fragen, was die
        Fehlermeldung mit "... headers already sent" bedeutet! ;-)

        Ich hätte diesen Post nicht gemacht, hätte ich nicht gelesen, das jemand soetwas mit Photoshop bewerkstelligt hätte, war aber vielleicht nur ein Witz...

        Eher.

        Gruesse,

        Thomas

        --
        Dank /my/ automatisch ausgeblendet: JavaScript, ASP.
        Manuell "ausgeblendet": Threads mit Frames, Iframes und Scrollbalken im Subject...
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        1. Hallo,

          Danke für das Durchschleuser-Skript, funktioniert wunderbar, nur:
          Sobald ich meine .php Datei in .gif umbenenne, wird das ganze wieder als Text ausgegeben.

          Beispiel:

          if ($zufallszahl<0.5)
            { $zielbild="bild1.gif"; }
          else
            { $zielbild="bild2.jpg"; }
          $bildurl="http://www.example.com/bildverzeichnis/$zielbild";

          header("Location: $bildurl");

          header("Location:") habe ich auch schon probiert, selber Erfolg.

          Danke trotzdem

          Bernhard

          1. hi,

            Sobald ich meine .php Datei in .gif umbenenne, wird das ganze wieder als Text ausgegeben.

            natürlich, weil dein server doch überhaupt nicht weiss, dass in der datei php-code drinsteht. also gibt er den inhalt einfach so an den browser aus, ohne den php-code vorher zu parsen.
            (allerdings sollte ein normal eingerichteter server die datei bei der endung .gif auch mit dem content-type für gif ausliefern, so dass ein richtiger browser, der nach diesem header text-daten empfängt, ein broken image anzeigen sollte. da dies offenbar nicht so ist, liegt also die vermutung nahe, dass du mit dem IE testest, der immer noch nicht gelernt hat, den content type richtig zu interpretieren ...?)

            zum einen, warum willst du die datei unbedingt in .gif umbenennen?

            wenn du dein script über
            <img src="scriptname.php" ...>
            in eine html-seite einbindest, wird dir ein browser trotzdem das bild anzeigen, wenn der content-type header richtig gesendet wurde, und anschliessend die bilddaten folgen.

            es gibt also eigentlich gar keine notwendigkeit dafür - ausser, du willst es auf einer fremden seite einbinden, wo du nur die chance hast, einen bild-URL anzugeben, der aber abgelehnt wird, wenn dieser nicht auf .gif oder .jpg endet ...?

            dann musst du deinem server noch beibringen, dass der die datei als php-script parsen soll. dies kann man für alle .gif-dateien machen, aber wenn du auch noch andere bilder in dem verzeichnis hast, ist das natürlich wieder quark ...

            also ist es ratsam, dass nur für diese datei zu machen.

            bevor man dir dazu genaueres sagen kann, müsste man aber erstmal wissen, welchen webserver du verwendest. beim apachen z.b. lässt sich dies idR. über eine .htaccess-datei regeln ...

            gruss,
            wahsaga

            1. es gibt also eigentlich gar keine notwendigkeit dafür - ausser, du willst es auf einer fremden seite einbinden, wo du nur die chance hast, einen bild-URL anzugeben, der aber abgelehnt wird, wenn dieser nicht auf .gif oder .jpg endet ...?

              Du sagst es

              bevor man dir dazu genaueres sagen kann, müsste man aber erstmal wissen, welchen webserver du verwendest. beim apachen z.b. lässt sich dies idR. über eine .htaccess-datei regeln ...

              Apache mit PHP 4.2.2
              Wie lässt sich das über .htaccess regeln?
              Ich werde schnell mal die Dokumentation lesen...

              Gruß
              Bernhard

              1. hi,

                Apache mit PHP 4.2.2
                Wie lässt sich das über .htaccess regeln?
                Ich werde schnell mal die Dokumentation lesen...

                du musst dafür sorgen, dass die datei mit der endung .gif ebenfalls durch den php-parser geschickt wird.

                dazu benutzt man http://httpd.apache.org/docs/mod/mod_mime.html#addhandler.

                für php wäre die syntax

                AddType application/x-httpd-php .gif

                dies in eine .htaccess-datei geschrieben, und in einem verzeichnis abgelegt, würde alle dateien mit der endung .gif in diesem und allen unterverzeichnissen durch den php-parser schicken (sofern der provider dir das erlaubt, sollte aber idR.)

                wenn man das jetzt aber nur für eine bestimmte datei machen möchte, so sollte dies mit der <Files>-direktive gehen, http://httpd.apache.org/docs/mod/core.html#files.

                allerdings weiss ich nicht genau, wie die AddHandler-synatx dann aussehen müsste, .gif wird man dort dann wahrscheinlich nicht angeben können(?).

                gruss,
                wahsaga

  3. Hallo Bernhard,

    schau Dir mal das hier:
    http://scripts.dmag.org/random_image/
    an. Du solltest aber schon wissen was ein cgi ist und wie man es installiert.

    Viele Grüße aus Ludwigsburg
    JK