GIF und Perl
Cheatah
Hi,
inzwischen bin ich ja mit den Grundlagen von GIF vertraut... aber die Ausgabe via Perl klappt leider nicht! Das Script sieht so aus:
$gif = "GIF87a";
$gif .= hex("01").hex("40").hex("00").hex("F0");
$gif .= hex("F7").hex("00").hex("00");
for ($i=255; $i>=0; $i--) { $gif .= hex("FF").hex($i).hex($i); }
$gif .= hex("2C").hex("00").hex("00").hex("00").hex("00").hex("01").hex("40").hex("00").hex("F0");
$gif .= hex("00");
for ($y=0; $y<=239; $y++) {
for ($x=0; $x<=319; $x++) {
$gif .= hex($y);
}
}
$gif .= hex("3B");
binmode STDOUT;
print "$gif";
Die meisten Angaben sind dabei Header u.ä. Die erste for-Schleife erstellt eine Farbpalette, die beiden geschachtelten sind für die Pixel da (so scheint das jedenfalls aufgebaut zu sein). Laut perl -c ist die Syntax OK. chmod 755 ist natürlich gesetzt, trotzdem kommt ein Internal Server Error. Kann mir irgendwer verraten, warum...?
Merci,
Cheatah
Hi,
inzwischen bin ich ja mit den Grundlagen von GIF vertraut... aber die Ausgabe via Perl klappt leider nicht! Das Script sieht so aus:
$gif = "GIF87a";
$gif .= hex("01").hex("40").hex("00").hex("F0");
$gif .= hex("F7").hex("00").hex("00");
for ($i=255; $i>=0; $i--) { $gif .= hex("FF").hex($i).hex($i); }
$gif .= hex("2C").hex("00").hex("00").hex("00").hex("00").hex("01").hex("40").hex("00").hex("F0");
$gif .= hex("00");
for ($y=0; $y<=239; $y++) {
»» for ($x=0; $x<=319; $x++) {
»» $gif .= hex($y);
»» }
}
$gif .= hex("3B");binmode STDOUT;
print "$gif";Die meisten Angaben sind dabei Header u.ä. Die erste for-Schleife erstellt eine Farbpalette, die beiden geschachtelten sind für die Pixel da (so scheint das jedenfalls aufgebaut zu sein). Laut perl -c ist die Syntax OK. chmod 755 ist natürlich gesetzt, trotzdem kommt ein Internal Server Error. Kann mir irgendwer verraten, warum...?
Merci,
Cheatah
Also, nimm am besten mal GD.pm. Das ist einfacher. Ich denke, der Fehler kommt, da du nicht vor der Ausgabe einen Content-type ausgegeben hast. Mach mal vorher folgendes:
print "Content-type: image/gif\n\n";
Hi,
Also, nimm am besten mal GD.pm. Das ist einfacher.
da möchte ich wenn möglich drauf verzichten...
Ich denke, der Fehler kommt, da du nicht vor der Ausgabe einen Content-type ausgegeben hast. Mach mal vorher folgendes:
print "Content-type: image/gif\n\n";
Danke, jetzt ist der Internal Server Error verhindert. Dummerweise ist das image broken... aber da arbeite ich mal mit Klaus dran :-)
Cheatah
hi Cheatah,
Also, nimm am besten mal GD.pm. Das ist einfacher.
da möchte ich wenn möglich drauf verzichten...
Warum?
Ich glaube du unterschätzt da gewaltig die Komplexität des GIF-Formats. Ich glaube nicht, dass ihr ohne Rekurs auf andere Softwae wie das Modul oder andere Grafikkonverter die Sache mit vernünftigem Arbeitsaufwand in den Griff bekommt.
Da ist die Arbeitszeit im Kennenlernen so eines Moduls besser angelegt.
Tschuess
Olaf
Hi Olaf,
Ich glaube du unterschätzt da gewaltig die Komplexität des GIF-Formats.
inzwischen wohl nicht mehr, zumindest nicht, wenn ich die Problematik auf von mir benötigte Resultate reduziere. Beispielsweise reichen mir GIFs in 256 Farben Truecolor mit nur einem einzigen Bild non-interlaced und nicht-transparent. GIF87a mit wenigen Optionen (eigentlich nur Breite x Höhe und die Farbpalette selber) reicht mir aus.
Ich glaube nicht, dass ihr ohne Rekurs auf andere Softwae wie das Modul oder andere Grafikkonverter die Sache mit vernünftigem Arbeitsaufwand in den Griff bekommt.
Ich habe bisher alles selbst gemacht, warum nicht auch dieses ;-)
Da ist die Arbeitszeit im Kennenlernen so eines Moduls besser angelegt.
Das ist gut möglich, befriedigt mich aber nicht. Ich bin jetzt bereits recht weit im Verständnis des Formats, und mir fehlen nur noch wenige Details. Warum also sollte ich jetzt aufhören?
Cheatah
Hi,
Irgendwie habe ich schon erwartet, dass Du es sein wuerdest, der (als erstes) eine Antwort schreibst - Vielen Dank. :-)
:-)
ich habe das bei mir gelöst, indem ich einfach counter.pl?page=Seitenname aufrufe.
Ja, die Idee hatte ich auch schon, und nun werde ich es auch so machen, aber schoen ist es nicht :-( Denn wenn man den Aufruf-Code von einer in die andere HTML-Datei kopiert, darf man nicht vergessen, die Zeile anzupassen. Und wenn Du Deine Counter rumreichst, besteht doch immer die Gefahr, dass mal zwei Leute denselben Identifier angeben, oder?
Jepp, die Problematik stimmt so. Ich habe mir darüber auch meine Gedanken gemacht, weil ich derzeit ebenfalls einen Counter programmiere, aber die Parameter-Lösung blieb immer als einziges über. Aber warum willst Du den Counter rumreichen? Als Counterprovider? Dann empfehle ich noch den Parameter id ;-)
Ja, meiner offensichtlich auch (NS 4.08). Aber bei GeoCities scheint es sehr gut zu funktionieren.
GeoCities macht das vermutlich über Serverkonfigurationen. Schließlich steht ja auch einiges im Logfile... und man kann so dies und das nutzen, wie man an Xoom-Grafiken sieht!
Oh, ein leidiges Thema...
Ja, das ist sicher schonmal jemandem vor mir aufgefallen...
*lol* :-)
Werden Variablen ($filename) also auch *innerhalb* von Anfuehrungszeichen aufgeloest? Das gibt es in keine anderen Sprache... (Ok, ich kenne natuerlich nicht alle auf der Welt). Oder hast Du das jetzt nur so zum Zeigen hingeschrieben? (Ich probier's aus)
Siehe Andreas' Antwort - innerhalb von "Doublequotes" werden sie aufgelöst, innerhalb von 'Singlequotes' nicht.
OK. Sieht gut aus, aber so ist die Sache verdammt abhaengig von der Geschwindigkeit des Systems. Ich wuerde etwas, wie sleep() einbauen, aber die kleinste Aufloesung ist dort 1 ganze Sekunde (eine Ewigkeit!).
Erhöhe einfach den Wert 5000 auf 10000 oder so, aber eigentlich sollte das reichen. Du kannst auch die Prüfung $flockcount < x einfach weglassen und darauf vertrauen, daß die Datei immer korrekt gelöscht wird.
Und zu 3.) Das geht doch sicher nur auf einem UNIX-Rechner, bei MS heisst es doch DEL. Aber es gibt da auch eine Perl-Funktion - unlink() - wie ich gesehen habe.
Ja, 'tschuldigung, aber hauptsache es wird gelöscht :-)
unlink() gibt es auch, aber Dateioperationen aller Art (auch mkdir etc.) mache ich persönlich lieber über system(). Keine Ahnung warum, aber ich betrete lieber bekannte Wege.
Nach Punkt 1 kannst Du noch prüfen, ob $flockcount den Wert 5000 erreicht hat. In dem Fall ist die Datei $filename.flock vermutlich durch einen Systemabbruch fehlerhaft noch existent,
Naja, oder der Server-Rechner war zu schnell.
:-)
Viel Glück, und halt mich bitte über Deine Fortschritte auf dem Laufenden :-)
OK, ich melde mich, wenn ich fertig bin - oder wieder Fragen habe :-)
Alles klar, wir werden dann sehen!
Cheatah
Hi,
Jepp, die Problematik stimmt so. Ich habe mir darüber auch meine Gedanken gemacht, weil ich derzeit ebenfalls einen Counter programmiere, aber die Parameter-Lösung blieb immer als einziges über. Aber warum willst Du den Counter rumreichen? Als Counterprovider? Dann empfehle ich noch den Parameter id ;-)
Nein, nicht ICH. Ich meinte DICH! Du willst doch Deine Counter anbieten? Ich mache das nur fuer unseren kleinen Server im Intranet, und da bin ich der Herrscher.
Calocybe
Hi,
Nein, nicht ICH. Ich meinte DICH! Du willst doch Deine Counter anbieten? Ich mache das nur fuer unseren kleinen Server im Intranet, und da bin ich der Herrscher.
ach so :-)
Ja, ich will meinen Counter anbieten. Da gibt es aber mehrere Parameter:
id = Benutzername,
counter = Countername (kann sich bei verschiedenen Benutzern wiederholen),
page = Seitennamen (kann sich bei verschiedenen Countern und/oder Benutzern wiederholen).
Auf diese Weise habe ich da eigentlich wenig Probleme mit... :-) Aber danke für Deine Sorge!
Cheatah
Offenbar spielt das Forum in letzter Zeit etwas verrueckt. Dieser Beitrag ist wieder zweimal zu lesen, einmal da wo es hingehoert im Thread "Perl-Prozesse synchronisieren - oder: Wie baue ich einen Counter?" als Antwort auf Cheatah, und einmal im Thread "GIF und Perl", wo ich mir angeblich selbst antworte. Beide Links zeigen auf die 8366.html. Soetwas gab's vor kurzem schonmal im Thread "ZENSUR bei Internet Magazin???" wo mein Beitrag auch zweimal gepostet wurde, einmal mit meinem Namen, einmal mit dem von Andre.
Stefan, kannst Du mal eben das Script korrigieren?
Calocybe
Hi,
das Script verhält sich eigentlich normal... es liest bei einer Antwort das HTML-File zeilenweise ein und prüft, ob ein bestimmtes Codewort mit der Nummer des Artikels, auf den man geantwortet hat, auftaucht. Durch den Fehler taucht dieses Codewort jetzt aber zweimal auf, deshalb wird der Artikel auch zweimal eingebunden...
Stefan, kannst Du mal eben das Script korrigieren?
Ich unterstütze den Antrag *grins*
Naja, jetzt wollen wir ihn mal nicht drängen, er hat ja schon zugesagt. Die Sache mit den doppelten Antwortartikeln wird er aber auch nicht ändern können, dazu muß er die Technik komplett umorganisieren.
Cheatah
hi Cheatah,
Das ist gut möglich, befriedigt mich aber nicht. Ich bin jetzt bereits recht
weit im Verständnis des Formats, und mir fehlen nur noch wenige Details.
Warum also sollte ich jetzt aufhören?
CODING IS FUN !
Das ist ein Argument, dem ich mich nicht verschließen will <g>. Dann weiterhin noch viel Spaß.
Tschuess
Olaf
hi!
trotzdem kommt ein Internal Server Error. Kann mir
»» irgendwer verraten, warum...?
Was steht den im error.log?
bye, Frank!
Hi,
Was steht den im error.log?
keine Ahnung, soweit ich weiß habe ich da keinen Zugriff drauf!
Cheatah
Hi,
ich habe den Fehler inzwischen gefunden. Natürlich hätte ich jeden hex() noch in ein chr() packen müssen... oh je... :-)
Trotzdem schaffe ich noch keine Grafikausgabe. Das liegt aber wohl eher am falsch verstandenen GIF-Format. Mist!
Cheatah