Habt Ihr Euch auch schon geärgert, dass Ihr tolle Fotos und perfekt inszenierte Grafiken für Eure Facebook-Seite oder Euer Facebook-Profil vorbereitet habt, und dann nach dem Hochladen sahen die bestenfalls suboptimal aus? Das liegt mehr oder weniger bekanntermaßen daran, dass Facebook auch bereits komprimierte Bilder beim Hochladen nochmals mit eigener Komprimierung bearbeitet um ein bestmögliches (weil kleines und damit wenig Platz verbrauchendes und schnell ladendes) Bildergebnis zu erreichen. Dabei nimmt man gerne mal Qualitätsverluste in Kauf, und so entstehen z.B. pixelige Flächen und mit Moiree versetzte Verläufe.
Als ich vor ein paar Jahren las, dass jemand ein Tool entwickelt, hat mit dem man geheime Botschaften in Facebook-Fotos verstecken kann, nahm ich zur Kenntnis, dass jener Programmierer vor allem mit eben diesem Problem der Facebook-Komprimierung zu kämpfen hatte. Das ließ mich sofort aufhorchen, und ich warf einen Blick in seine ausführliche Dokumentation. Und tatsächlich wurde ich fündig:
„The literature states that Facebook uses quality factor 85 for storing JPEGs. To verify this, 10 uncompressed images (of dimension 960-by-720) were compressed using JPEG at Quality Factor (QF) 85 and uploaded to Facebook. Once downloaded the coecients of the new images were extracted and compared with those of the original images. The new coecients were found to be on average x% larger than the originals with very little variance. The test was repeated with QFs 55 and 35, resulting in average changes of y% and z% respectively.
It was observed that these values fit a straight line on a graph of QF against percentage change. Solving the equation of this line to find a change of 0% gave a QF of 75. Comparing a QF 75 JPEG’s coecients before and after re-compression by Facebook results in an average error rate of 6% (down from approximately 99% for all other QFs tested) indicating Facebook does use QF 75 when compressing images.
To confirm Facebook’s use of QF 75 I used Libjpeg to extract the quantisation matrix of an image downloaded from Facebook and compared it to that of an image compressed with QF 75 by the reference JPEG implementation (provided by the Independent JPEG Group). The quantisation matrices were equal (provided in Table 1) and hence the default compression functionality of a reference implementation with QF 75 is acceptable as an approximation to that of Facebook and is as close as can be within the scope of this research.“
Was heißt das nun für uns arme Pixelschubser?
Nun, das bedeutet zunächst, Facebook nutzt einen Qualitätsfaktor von etwa 75 bei der JPEG-Komprimierung. Eine vergleichbare Komprimierung der hochzuladenen Bilder sollte also von Vorteil sein. (Bei der 12er Skala entspräche das etwa dem Wert 9)
Nun ist es so einfach nicht. Denn wie ein Qualitätsfaktor ausfällt, hängt leider Gottes davon ab, mit welcher Software er erzeugt wurde. So unterscheiden sich die Qualitätsfaktoren bei z.B. Apple, Paint Shop Pro und Photoshop erheblich. Bei Apple entsprach der QF 50 etwa dem QF 80 auf der IJG-Skala.
Doch was passiert, wenn ein mit QF 75 komprimiertes Bild beim Hochladen nochmals mit dem gleichen Faktor komprimiert wird? Dieses Problem existiert tatsächlich. Aber die Praxis hat offenbar gezeigt, dass mehrfaches identisches Komprimieren (vor dem Upload) die Abweichungen von anfangs 3,1% auf deutlich unter 1 Prozent minimiert. Also einfach mehrfach speichern (unter den o.g. Bedingungen), und es sollte alles klappen.
Tja, Leute. Sorry, Ich hatte auch gehofft, es sei einfacher. Wäre doch toll, wenn Facebook sich mal ein Herz nehmen würde und einen Komprimierfilter z.B. als Plugin für Photoshop anbieten würde. Von mir aus dürfte der auch Geld kosten, wenn er was kann. Solange müssen wir uns eben wie hier beschrieben behelfen.
Hoffe, Ihr könnt was damit anfangen. 🙂
[PS: Dieser Artikel wurde bereits vor geraumer Zeit geschrieben, aber aus irgendeinem Grund nie veröffentlicht. Ich glaube aber, dass er noch immer aktuell ist, daher habe ich ihn nun doch noch freigegeben. ^^]