Chris Weber: Probleme mit GD

Hallo,

ich versuche mich gerade in GD einzuarbeiten und habe das kleine einleitende Beispiel abgeschrieben, das man in der Doku zu GD findet.  Hier der Quelltext:

use GD;

create a new image

$im = new GD::Image(100,100);

allocate some colors

$white = $im->colorAllocate(255,255,255);
$black = $im->colorAllocate(0,0,0);      
$red = $im->colorAllocate(255,0,0);      
$blue = $im->colorAllocate(0,0,255);

make the background transparent and interlaced

$im->transparent($white);
$im->interlaced('true');

Put a black frame around the picture

$im->rectangle(0,0,99,99,$black);

Draw a blue oval

$im->arc(50,50,95,75,0,360,$blue);

And fill it with red

$im->fill(50,50,$red);

make sure we are writing to a binary stream

binmode STDOUT;

$gif_data = $im->gif;
open(OUT, ">test.gif");
print OUT $gif_data;
close(OUT);

Ich habe nur die letzten 4 Zeilen geändert so daß alles in eine Datei geschrieben und nicht auf der Kommandozeile ausgegeben wird.  So und jetzt zum Problem:  Die Datei "test.gif" kann von keinem Grafikprogramm geoeffnet werden !  Wenn ich das Bild in eine HTML-Seite einfüge wird es zwar angezeigt, jedoch verzerrt, d.h. mit vielen seltsagen roten Streifen drin.  Was soll das ?  Ich habe das ganze mit ActivePerl versucht und auch GD von ActiveState runtergeladen für den Fall das das relevant ist.

Danke
  Chris Weber

  1. Hallo auch,

    Ich arbeite auch mit GD und lasse Images erstellen, die ich dann speichere. Auf diese Dateien referenziere ich dann mit einer URL. Im Vergleich zu meinem Skript fallen mir folgende Unterscheide auf.

    binmode STDOUT;

    Diese Zeile muß man löschen. Diese ist nur wichtig, wenn das Image direkt an den Browser geschickt werden soll.

    $gif_data = $im->gif;

    Dieses umkopieren ist nicht notwendig. Sollte aber nichts mit Deinem Problem zu tun haben.

    print OUT $gif_data;

    Bei mir sieht das So aus
    print OUT $im->gif;

    Ich denke, daß es nur was mit der Zeile binmode STDOUT zu tun hat.

    Gruß Hansi

    1. Hi,

      binmode STDOUT;
      Diese Zeile muß man löschen. Diese ist nur wichtig, wenn das Image direkt an den Browser geschickt werden soll.

      sie schadet aber nicht. Wenn nach STDOUT nichts geschickt wird, naja, dann ist es doch egal, welcher Modus gerade vorliegt :-)

      print OUT $gif_data;
      Bei mir sieht das So aus
      print OUT $im->gif;

      Ich denke, daß es nur was mit der Zeile binmode STDOUT zu tun hat.

      Ich denke eher, daß ein
      binmode OUT;
      _vor_ der print-Zeile fehlt. Auf "archaischen" Systemen (bei Perl ist damit alles außer Linux gemeint *g*) ist dieser binmode wichtig, weil sonst alle Umbrüche umgewandelt werden.

      Cheatah

      1. Hallo Cheatah,

        Ich denke eher, daß ein
        binmode OUT;
        _vor_ der print-Zeile fehlt. Auf "archaischen" Systemen (bei Perl ist damit alles außer Linux gemeint *g*) ist dieser binmode wichtig, weil sonst alle Umbrüche umgewandelt werden.

        Cheatah

        danke fuer den Tip.  Das mit binmode OUT; hat geklappt und das tolle mit rot gefüllte Oval glotzt mich jetzt auch an *g*.

        Danke noch mal
          Chris Weber