##Erledigt## [Perl] GDlib zeigt nur rotes Bild

MaxFleit

web2systems
ID: 308871
L
15 Januar 2008
293
28
Hallo,
ich habe ein kleines Perl Problem. Ich möchte Schrift auf einem .jpeg Bild einfügen.

Hier das Snippet:

Code:
$bild = new GD::Image(250, 60);
$rot=$bild->colorAllocate(255, 0, 0);
$weiss=$bild->colorAllocate(255, 255, 255); 
$im = newFromJpeg GD::Image("gdlib.jpg");
$bild->setTile($im);
$bild->string(gdLargeFont,120,25,"beispiel", $weiss);
 
binmode STDOUT;
print ($bild->png);

Leider wird aber nur ein roter Hintergrund und nicht das Bild gdlib.jpg angezeigt. Die Gdlib ist installiert!

Gruss
MaxFleit
 
Zuletzt bearbeitet:
"-w" ist dein Freund! ;)

Immerhin hast du scheinbar noch ein anderes Problem,
wenn auf dem roten Hintergrund nicht "beispiel" steht. :think:
 
Hinter die Shebang ... also wie man Perl dazu bewegt
Warnungen und Fehlermeldungen auszusprucken gehört
eigentlich zu den Grundlagen. Zurück auf los ... ;)
 
Es wir kein Fehler ausgegeben, es wird ein Bild dargestellt nur halt net das angegebene sonder ein rotes iwas halt!

Es ist quasi so als wenn die Datei nicht eingebunden wär!
 
Ich kenn mich in Perl nicht aus und hab die folgende Zeile auch nur durchs Googlen gefunden (Quelle), aber es scheint so, als würde der Header fehlen, damit der Browser weiss, was er überhaupt mit den Daten machen soll, die er da kriegt:
PHP:
print "Content-type: image/png\n\n";
 
Kannste mir nochmal nen weiteres Stichwort zu "-w" geben=? Stehe grade aufm Schlauch.

Hinter die Shebang ... also wie man Perl dazu bewegt
Warnungen und Fehlermeldungen auszusprucken gehört
eigentlich zu den Grundlagen. Zurück auf los ...

oder du schreibst vor use gdlib;
noch:
Code:
use strict;
use warnings;

was bei perl an sich auch äußerst sinnig und hilfreich ist.
Damit wird perl aufgefordert den Code strenger zu analysieren (zB benutzte Variabeln müssen erst deklariert werden) und Warnungen auszugeben.
;)
 
Er zeigt keine Fehler an, auch bei stric etc. net!

Mit dem Contenttype das habe ich natürlich vorher gemacht. Und es gibt ja auch die Ausgabe.

Hier mal was passiert:

 
Dann poste mal das gesamte script...

angefangen von der shebang Zeile bis zum Ende, dh mit Varaibeln-Deklaration etc.
Die Doku zum modul gd hast du gelesen ?

EDIT:
Nun das hatte ich gedacht... das skript tut was du programmierst *ggg*
poste aber erst das gesamte Teil, dann kann ich ja versuchen dir deinen Denk-Fehler aufzuzeigen ;)
 
So hier das komplette Script!

Code:
#!D:\Perl\bin\perl.exe
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type: image/png\n\n";
use strict;
use warnings;
 
use GD;
my $bild = new GD::Image(250, 60);
my $rot=$bild->colorAllocate(255, 0, 0);
my $weiss=$bild->colorAllocate(255, 255, 255); 
my $im = newFromJpeg GD::Image("hallo.jpg");
$bild->setTile($im);
$bild->string(gdLargeFont,120,25,"beispiel", $weiss);
 
binmode STDOUT;
print ($bild->png);
 
Dann fangen wir mal an ;)
Code:
#!D:\Perl\bin\perl.exe
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use GD;      

my $bild = new GD::Image(250, 60);
my $rot=$bild->colorAllocate(255, 0, 0);
my $weiss=$bild->colorAllocate(255, 255, 255); 
my $im = newFromJpeg GD::Image("hallo.jpg");
$bild->setTile($im);
$bild->string(gdLargeFont,120,25,"beispiel", $weiss);

print "Content-type: image/png\n\n";
binmode STDOUT;
print ($bild->png);

erstmal kleine Schönheitskorrekturen, ich beziehe mich auf dieses script bei Zeilenangaben...

mit Zeile 7 und 10 legt du je ein GD-Objekt an. $bild und $im
Zeile 8-9 widmen sich Objekt $bild
Zeile 11, 12 - Objekt $bild

Die Ausgabe - ab Zeile 14 dreht sich um $bild...
Dein jpeg hast du aber in $im

Denkfehler schon klarer ?
;)
 
Zuletzt bearbeitet:
Code:
#!D:\Perl\bin\perl.exe
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use GD; 

my $bild = new GD::Image(250, 60);
my $rot=$bild->colorAllocate(255, 0, 0);
my $weiss=$bild->colorAllocate(255, 255, 255); 
my $im = newFromJpeg GD::Image("hallo.jpg");
$bild->setTile($im);
$bild->filledRectangle(0,0,250,60,gdTiled);
$bild->string(gdLargeFont,120,25,"beispiel", $weiss);

print "Content-type: image/png\n\n"; 
binmode STDOUT;
print ($bild->png);

So habs eig. genau so wie in der Doku gemacht, es geht aber net!
 
Benenne 'hallo.jpg' mal um und schaue, ob er sich
beschwert, dass er die Datei nicht finden kann.