Facebook gibt Bildverarbeitungsbibliothek frei

Mit der Bibliothek Spectrum sollen Entwickler die Zuverlässigkeit und Qualität von Bilduploads in Anwendungen verbessern können.

In Pocket speichern vorlesen Druckansicht 12 Kommentare lesen
Facebook

(Bild: dpa, Tobias Hase)

Lesezeit: 3 Min.
Von
  • Alexander Neumann
Inhaltsverzeichnis

Facebook hat seine kürzlich auf der droidcon in San Francisco vorgestellte Bildverarbeitungsbibliothek für Android und iOS als Open Source freigegeben. Mit Spectrum soll sich die Zuverlässigkeit und Qualität von Bilduploads in Anwendungen verbessern lassen. Das zumindest hat das soziale Netz in seinen Anwendungen beobachten können, wie die Entwickler in ihrer Ankündigung schreiben. Die Open-Source-Legung geschieht im Zuge der Freigabe von Version 1.0.0.

Durch die Reduzierung der Dateigröße via Transkodierung lässt sich der Datenverbrauch mit Spectrum verringern und die Zuverlässigkeit der Uploads verbessern. Was sich so einfach liest, erfordert wohl aber ein tiefes Verständnis der verschiedenen Verarbeitungsschritte und Bildformate, damit die Reduzierung der Größe nicht die Qualität beeinträchtigt.

Die deklarative API von Spectrum soll es Entwicklern ermöglichen, sich anstelle der einzelnen Schritte auf die gewünschten Ausgabeeigenschaften zu konzentrieren. Das gewährt Spectrum, transparent den geeigneten Weg zum Erfüllen der Transkodieranforderung zu wählen. Wenn möglich bevorzugt die Bibliothek verlustfreie Operationen zum Zuschneiden und Drehen von JPEG-Bildern. Ein weiteres Beispiel ist die Größenänderung, bei der Spectrum das Zusammenspiel zwischen Decoder-Sampling und pixelgenauer Größenänderung optimieren möchte.

Die Ausführungsreihenfolge für die einzelnen Verarbeitungsschritte erfolgt über sogenannte Recipes, die als Plug-ins bereitstehen. Das JPEG-Plug-in bietet beispielsweise welche zum Zuschneiden und Drehen von JPEG-Bildern offenbar ohne Verlust. Alle "Rezepte" werden intern zusammengefasst und so sortiert, dass verlustfreie und effiziente oben stehen. Bei jeder Anfrage wiederholt Spectrum die Liste, um das erste passende (und damit effizienteste) Rezept auszuführen. Der letzte Ausweg ist anscheinend ein generisches Recipe, das jede Anforderung durch Dekodierung und Kodierung des Bildes verarbeiten kann.

Die zentralen Komponenten von Spectrum sind in C++ geschrieben. Das ermöglicht die Nutzung der Facebook-Apps sowohl auf Android als auch auf iOS, wodurch die Ergebnisse einheitlicher werden. Die Java- und Objective-C-APIs sind nur Wrapper um diesen Kern herum, um die Entwicklung zu erleichtern. Darüber hinaus bietet der in C++ geschriebene Kern eine größere Kontrolle über die Zuweisungen und ermöglicht oft eine höhere Ausführungsgeschwindigkeit bei rechenintensiven Aufgaben.

Der Kern der Bibliothek ist in C++ implementiert. Er gleicht eingehende Anfragen mit einer Reihe von Recipes ab, die die Bildoperation erfüllen können.

(Bild: Facebook)

Die Integration mit Bibliotheken wie MozJpeg ermöglicht es Spectrum darüber hinaus, Verschlüsselungsparameter über die APIs der jeweiligen Plattform hinaus zu steuern. Rechenintensive Kodierungsaufgaben, die mehr Verarbeitungszeit erfordert, aber die Dateigröße deutlich reduziert, lassen sich so umsetzen. Das mag ein wichtiger Kompromiss auf dem mobilen Geräts ein, auf dem eine langsame Netzwerkverbindung das Upload-Erlebnis beeinflussen kann. Auch lassen sich fortgeschrittenere Parameter wie Farbunterabtastung steuern, um die Qualität von Bildern mit scharfen Kanten und Illustrationen zu verbessern.

Weitere Informationen zu Spectrum finden sich auf der Projekt-Website. Den Code der unter der MIT License stehenden Bibliothek gibt es auf GitHub. (ane)