Gravatare zwischenspeichern und eingrauen | 30. September 2005 um 22:11 Uhr / Programming
Als ich am monochromen Block Design arbeitete und fast fertig war fiel mir auf, dass Christian auch Gravatare nutzt. Jetzt war alles schön Schwarz - Weiß nur diese Gravatare haben die ganze Stimmung kaputtgemacht indem sie mit krassen Farben aus dem Rahmen fielen. Da musste Abhilfe geschaffen werden. Ich habe Christian gebeten ein Plugin zu schreiben welches die Gravatare on-the-fly in Grau umwandelt. Er hatte aber keine Zeit also blieb es doch an mir hängen, wenn ich das haben wollen würde.
Ich habe das ganze sogar ziemlich schnell hinbekommen, so dass die Bildchen auch schön grau wurden. Als ich so schön beim Testen war teilte man mir mit, dass das ganze ziemlich ressourcenfressend ist, vor allem wenn ein Blog öfter besucht würde, dann zwingt so etwas einen Server ganz schnell in die Knie. Es musste also eine andere Lösung her.
Die Meiste Arbeit machte es die Bildchen Pixel für Pixel von Farbe zu befreien. Wenn das getan war musste man es nur noch ausgeben. Wenn man es also irgendwo auf dem Server abspeichern würde müsste man es nur noch ausgeben falls es noch einmal angefordert wird. Somit war die Idee des Cachings geboren. Die Umsetzung war dann um so schwieriger.
Als erfahrener Programmierer hat dann irgendwann einmal Christian übernommen und das ganze zuende geführt mit richtigem Caching für alle Gravatare. Auch gab es bei meiner Version probleme mit 24-bit PNGs, die nicht so richtig grau werden wollten. Das hat er auch bereinigt.
Leider unterstützt Gravatar.com keine If-Last-Modified header, so dass es einen größeren Workaround bedurfte nicht jedes mal den ganzen Gravatar herunterzuladen.
Die Geschwindigkeit der Ausgabe der Gravatare wurde dadurch um einiges erhöcht, da kein fremder Server mehr kontaktiert werden muss. Ein weiterer Vorteil ist, dass falls Gravatar.com mal wieder ausfallen sollte alle Gravatare aus dem Cache weiter funktionieren und zur Not das default Gravatar angezeigt wird.
Kann ich das auch nutzen?
Ja, natürlich. In der Datei befindet sich auch eine Installationsanleitung auf Englisch aber hier noch einmal auf Deutsch:
- Lade diese Datei gravatar-cache-n-gray.php in deinen Browser, speichere sie auf deiner Festplatte (Datei -> Speichern unter) und lade sie mittels eines FTP Programmes auf deinen Server hoch.
- In deinem Template oder Gravatar-Plugin musst du jetzt den Bild-URL (also das
srcim Bildtag)von:
<img src="http://www.gravatar.com/avatar.php?gravatar_id=[hier gibt es weitere Daten]" />zu:
Außer<img src="/pfad/zu/gravatar-cache-n-gray.php?gravatar_id=[hier kommt die url-encodete E-Mail Adresse]" />gravatar_idwird allerdings nichts übernommen und falls etwas dort steht wird es von den DEFINITIONS überschrieben - Nun musst du noch die DEFINITIONS an deine Bedürfnisse Anpassen
Ihr dürft das Plugin gerne für eure Zwecke nutzen es steht wahlweise unter der BSD, GPL, Artistic Licence, sucht euch einfach die aus die für euer Projekt am besten passt.
Kommentare
Die Kommentare sind für diesen Eintrag geschlossen.




abonnieren.
dejot aus werne schrieb am 01.10.2005
mal eine Frage dazu:
Ist das hier Absicht?
Die 1 fehlt *g*.
Ansonsten nettes Plugin :)
dejot
Jeena Paradies aus Varberg schrieb am 01.10.2005
hehe interessant, dass du das jetzt ansprichst, vor einigen Augeblicken hat mich Christian auch darauf aufmerksamm gemacht und ich habe das bereinigt.
wahsaga schrieb am 04.10.2005
Gehst du wirklich Pixel für Pixel im Bild durch?
Ja, wenn man das Script anschaut, offenbar schon.
Da finde ich (für den Normalgebrauch) die Methode aus diesen Beispiel irgendwie ein wenig effektiver.
Dort werden lediglich in der Farbpalette des Bildes die einzelnen Farben in Graustufen umgewandelt - also müssen maximal 256 Schleifendurchläufe gemacht werden.
Falls jemand das verlinkte Script mal ausprobieren möchte, obacht: Dort muss natürlich bei Anwendung auf ein normales (True color) Bild dieses zunächst in eins mit Farbpalette umgewandelt werden, das fehlt im Script. Folglich wird die Farbänderungsschleife auch gar nicht durchlaufen, weil es eben keine Farben im Palettenindex gibt. Also vorher das Bild mit imagetruecolortopalette() umwandeln.
Ich finde die damit erzielten Ergebnisse nach einem ersten Test recht brauchbar - habe es allerdings noch nicht mit Ferkeleien wie Alphatransparenzen etc. ausprobiert.
macx schrieb am 04.10.2005
Ich verstehe auch überhaupt nicht, wieso du jeden einzelnen Pixel bearbeitest, statt mit einem Befehl einfach das ganze Bild. Da darfst du dich nicht wundern, wenn dies resourchenfressend ist.
Jeena Paradies aus Varberg schrieb am 04.10.2005
Die Alphatransparenz hat uns sehr viel Ärger bereitet und sie ist immer noch nicht richtig umgesetzt. Je nach Bild sieht es teilweise ziemlich erschreckend aus was da rauskommt.
Es gibt mit PHP und GD2 keinen Befehl um das ganze Bild auf einmal in Graustufen umzuwandeln macx, zumindest sagen mir das die Suchmaschinen und das PHP Manual. Wenn du einen Weg gefunden hast dann lass uns das bitte wissen, damit wir das Script verbessern können.
Christian Kruse aus Dortmund / NRW schrieb am 04.10.2005
Wahsaga, auf die Idee war ich auch gekommen. Aber das Bild muss Pixelweise durchlaufen werden, um die (Alpha-)Transparenzen zu erhalten. Wenn du genauer hingesehen hättest, hättest du bemerkt, dass die Pixel, bei denen der Alphawert auf 127 steht (7 Bit auf 1 gesetzt, 7 Bit ist die breite des Alphakanals) sogar gar nicht angepasst werden, sondern 1:1 übernommen werden in das neue Bild, um die Transparenzen zu erhalten. Dasselbe gilt für Alpha-Transparenz < 127.
Prinzipiell würde deine Methode trotzdem noch funktionieren (indem man das per ImageCreateFromString() erzeugte Ursprungsbild benutzt und kein neues erzeugt), wenn da nicht ein Problem wäre, dessen Grund ich noch nicht herausgefunden habe: nimm ein Bild und parse es mit ImageCreateFromString(). Mit ImageCreateFromPNG habe ich es noch nicht ausprobiert, denke aber, es wird ähnlich sein. Dann speichere es mit ImagePNG() in eine Datei oder lass es nach stdout schreiben. Du wirst sehen, dass sämtliche Transparenz und Alpha-Transparenz verloren geht. Getestet mit GD-Lib 2.0.32.
Ich habe in den Source nicht umsonst geschrieben
;-)
Jeena Paradies aus Varberg schrieb am 24.10.2005
Manueller Trackback:
Personal Avatar (aka Pavatar) - unabhängige Avatare
Personal Avatar ist ein Weg Avatare unabhängig von einem Zentralen Dienst zu nutzen. Hier stelle ich meine Spezifikation dazu vor.