klaus: Zweifache Grafikausgabe

Beitrag lesen

Hallo Nadine,

sub Zeige_bild
{
  $file = $_[0];
  $teilbildgroesse = 1024;    
  open(BILD, $file);  
  binmode(BILD);
  binmode(STDOUT);    
  while(read(BILD, $teilbild, $teilbildgroesse))
  { print $teilbild;
    }
  close(BILD);
}

Dieser COde ist zwar grundsätzlich o.k., ich würde es jedoch ein bißchen anders machen.
Hier mein Vorschlag:

-----------------------------------------------------------------------------------
use strict;   #  Variablen müssen deklariert werden, sonst schimpft der Interpreter

sub Zeige_bild
{
my($file) = @_;    # durch das 'my' wird '$file' deklariert, und ist nur in der Funktion sichtbar,
                          # was zu weniger Nebeneffekten führt
local(*BILD);        # Filehandles können nicht mit 'my' deklariert werden. dieses 'local' ist jedoch besser als nichts.
open(BILD,$file) or &print_error_and_exit("Nix da mit dem Bild $file",$!);
                          # open kann auch schiefgehen, sollte abgefangen werden
binmode(BILD);    # eigentlich nur unter Windows notwendig, aber
                          #  'nutzts nix, dann schadets auch nix'
binmode(STDOUT); # mach ich eigentlich nie, auch nicht unter Windows
print "Content-type: image/jpeg\n\n";
print while(<BILD>); # die sache mit dem 'read' ist eigentlich hier nicht notwendig
close(BILD);
}
-----------------------------------------------------------------------------------

noch besser wäre m.E. (in Hinblick auf ein eventuell eingesetztes mod_perl)
-----------------------------------------------------------------------------------
use strict;
use IO::File;

sub Zeige_bild
{
my($file) = @_;

my($fh) = IO::File->new($filename)
    or &print_error_and_exit("Nix da mit dem Bild $file",$!);

print "Content-type: image/jpeg\n\n";
print while(<$fh>);
close($fh);
}
-----------------------------------------------------------------------------------

Nun versuche ich mit den folgenden Aufrufe von Zeige_bild
zwei Bilder nebeneinander auf der Seite zu zeigen.

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

&Zeige_bild('bild_1.jpg');
&Zeige_bild('bild_2.jpg');

Doch ich bekomm nur das bild_1.jpg zu sehen, ich will aber beide darstellen.
Wie macht man das, ohne das man externe Module wie GD.pm benutzn muß!
Oder geht das gar nicht mit dem Unterprogramm Zeige_bild.

Das geht nicht! Du willst zwei Bilder quasi zu einem verschmelzen, das kann aber so nicht funktionieren.
Eine Grafik-Datei hat auch ein bestimmtes Format, wobei am Anfang einige Angaben zum internen Aufbau des Bildes (Format, Größe, Farben, Palette oder was auch immer) angegeben sind.
Ein Programm, welches dieses Bild darstellt, wertet diese Angaben aus, um das Bild korrekt darstellen zu können.
Ein Bild, welches aus beiden Bildern bestehen würde, hat eben andere Angaben zu machen als Dein Bild 1.
Und selbst wenn es irgendwie gehen würde, würdest du Dir nicht sicher sein können, daß die Bilder auch _nebeneinander_ dargestellt werden.

Ich bin mir nicht sicher, aber ich glaube GD.pm wäre mit einer solche Aufgabe auch überfordert.

Warum machst Du das nicht im aufrufenden HTML-Code. Zwei Img-Tags und Du kanstt die Bilder hingeben, wo Du willst. Ist im Prinzip einfacher und ohne Tricks.

Grüße
   Klaus