Peter: Bilder

Hallo,

ich versuche seit geraumer Zeit zu verstehen, wie dass mit CGI/Perl+Bilder funktioniert.
Aber ich möchte nicht nur irgendwelchen Code abkupfern, sondern auch ganz gerne verstehen, wie's funktioniert:

In meiner test.html steht unter anderem Folgendes:
<img src="/cgi-bin/bild.cgi" >

Und in bild.cgi steht unter anderem Folgendes:
print "Content-type: image/gif\n\n";
print "hier soll das Bild geprinted werden";

Wie dass "hier soll das Bild geprinted werden" funktioniert, verstehe ich einfach trotz intensiven Studiums verschiedener Scripte einfach nicht.

Ich bräuchte 'n Script + Erklärung!

Übrigens der weiterführende Link in Forums-Auslese zu Grafik-Counter funktioniert nicht.

Auch habe ich ein Gif in einem HEX-Editor geöffnet, um zu verstehen, nach welchen Regeln sich der Code eines Gifs zusammensetzt. Aber ich verstehe noch nicht mal, welcher Zeichensatz(ANSI, ASCII 7bit, DOS 8bit) relevant ist für mein Problem.

Peter

  1. Hallo,

    ich versuche seit geraumer Zeit zu verstehen, wie dass mit CGI/Perl+Bilder funktioniert.
    Aber ich möchte nicht nur irgendwelchen Code abkupfern, sondern auch ganz gerne verstehen, wie's funktioniert:

    In meiner test.html steht unter anderem Folgendes:
    <img src="/cgi-bin/bild.cgi" >

    Und in bild.cgi steht unter anderem Folgendes:
    print "Content-type: image/gif\n\n";
    print "hier soll das Bild geprinted werden";

    Wie dass "hier soll das Bild geprinted werden" funktioniert, verstehe ich einfach trotz intensiven Studiums verschiedener Scripte einfach nicht.

    »»

    Ich bräuchte 'n Script + Erklärung!

    Übrigens der weiterführende Link in Forums-Auslese zu Grafik-Counter funktioniert nicht.

    Auch habe ich ein Gif in einem HEX-Editor geöffnet, um zu verstehen, nach welchen Regeln sich der Code eines Gifs zusammensetzt. Aber ich verstehe noch nicht mal, welcher Zeichensatz(ANSI, ASCII 7bit, DOS 8bit) relevant ist für mein Problem.

    Peter

    Also, die einfachste Art, wie so ein Bild entsteht ist:

    open (BILD, "irgendwas.gif");
    @Bild = <BILD>;
    print @Bild;
    close (BILD);

    So, das wars. Jetzt kann dein CGI auch Bilder anzeigen. Das selbergenerieren von Bildern ist etwas aufwendiger. Dafür gibt es spezielle Module. Sie funktionieren vom Prinzip her wie ein Grafikprogramm, sei es nun Paint oder Corel Draw.

    Ein sehr gutes Modul für Bilderzeugung unter Perl ist GD.

    Es gibt auch noch Module, die können sich mit einem Bildverarbeitungsprogramm in Verbindung setzen, ihm den Befehl geben, ein Bild zu generieren, und das Bild dann zurückgeben.

    1. bild wird mittlerweile auch angezeigt,
      leider nur auf unix-server:
      http://www.tigerweb.de/gif.html
      aber unter windows-server wir bild verzerrt/kaputt angezeigt, hab's mit binmode probiert funzt leider auch nicht:
      http://www.frankfurt-stadtteile.de/test/gif.html

      #!c:/perl/perl.exe

      binmode(STDIN);
      binmode(STDOUT);
      binmode(STDERR);

      print "Content-type: image/gif\n\n";

      open (BILD, "test.gif");
      @Bild = <BILD>;
      print @Bild;
      close (BILD);

      #print "http://localhost/test/test.gif";

      1. bild wird mittlerweile auch angezeigt,
        leider nur auf unix-server:
        http://www.tigerweb.de/gif.html
        aber unter windows-server wir bild verzerrt/kaputt angezeigt, hab's mit binmode probiert funzt leider auch nicht:
        http://www.frankfurt-stadtteile.de/test/gif.html

        #!c:/perl/perl.exe

        binmode(STDIN);
        binmode(STDOUT);
        binmode(STDERR);

        binmode(BILD);

        print "Content-type: image/gif\n\n";

        open (BILD, "test.gif");
        @Bild = <BILD>;
        print @Bild;
        close (BILD);

        #print "http://localhost/test/test.gif";

        Versuch das mal.

        1. binmode(BILD);

          Versuch das mal.

          vielen vielen ... dank ERIK, so hat's gefunzt !

  2. Und in bild.cgi steht unter anderem Folgendes:
    print "Content-type: image/gif\n\n";
    print "hier soll das Bild geprinted werden";
    Wie dass "hier soll das Bild geprinted werden" funktioniert, verstehe ich einfach trotz intensiven Studiums verschiedener Scripte einfach nicht.

    Passende binäre Daten erzeugen (siehe unten) und ausgeben (einfach mit print).

    Ich bräuchte 'n Script + Erklärung!

    Schau Dich mal in den Perl-Modulen um (CPAN usw.). Da muß es fertige Module für die Erzeugung bestimmter Graphikformate geben.
    Ob da gerade GF dabei ist, bin ich nicht ganz sicher, weil auf das in GIF verwendete Komprimierungsverfahren ein Copyright existiert (das hat indirekt zur Erfindung von PNG geführt).

    Auch habe ich ein Gif in einem HEX-Editor geöffnet, um zu verstehen, nach welchen Regeln sich der Code eines Gifs zusammensetzt. Aber ich verstehe noch nicht mal, welcher Zeichensatz(ANSI, ASCII 7bit, DOS 8bit) relevant ist für mein Problem.

    Gar kein Zeichensatz, sondern komprimierte binäre Daten.
    Das nachzvollziehen ist konkret bei GIF auch schwierig, weil eine GIF-Datei mit einem ziemlich trickreichen Verfahren komprimiert ist. Den einzelnen Bits und Bytes sieht man den Inhalt nur sehr schwer an. Ich habe mal selbst versucht, das Lempel-Ziv-Verfahren nachzuprogrammieren, aber ziemlich schnell aufgegeben.
    Aber mit entsprechenden Standardfunktionen aus Perl-Modulen mußt Du wahrscheinlich "bloß" eine normale Bitmap als Array etc. aufbauen und dann durch entsprechende Funktionsaufrufe in das Zielformat umwandeln können.

  3. Hallo Peter

    Auch habe ich ein Gif in einem HEX-Editor geöffnet, um zu verstehen, nach welchen Regeln sich der Code eines Gifs zusammensetzt. Aber ich verstehe noch nicht mal, welcher Zeichensatz(ANSI, ASCII 7bit, DOS 8bit) relevant ist für mein Problem.

    Zum Thema GIF-Format gibt es einige spannende Threads vom Januar 99 (http://www.teamone.de/sfarchiv/1999_1/t01835.html und weitere).
    Das Thema kostet bestimmt ein Wochende oder mehr ... :-)

    Grüsse

    Tom