Ein Blick auf die Komprimierungsqualität von Instagram

click fraud protection

Finden Sie heraus, ob die schlechte Komprimierungsqualität von Instagram für Android auf Plattformbeschränkungen oder auf absichtliches Handeln der Instagram-Entwickler zurückzuführen ist.

Die Instagram-Anwendung für Android hat sich heute zu einer der beliebtesten Social-Media-Plattformen der Welt entwickelt. Mit über 300 Millionen monatliche Nutzer auf allen Plattformenund über 100 Millionen Einzeldownloads im Google Playstore erwarten Sie von der Facebook-Anwendung zum Teilen von Schnappschüssen, dass sie sich durch Qualität sowohl im Design als auch in der Funktionalität auszeichnet. Bedauerlicherweise gelingt es Instagram bei einem großen Teil seiner Nutzerbasis – nämlich den Android-Instagrammern – nicht, das Einzige, was es eigentlich tun soll, nämlich hübsche Bilder zu teilen, gut zu machen.

Während iOS-Nutzer ihre Kreationen und Momente mit hoher Wiedergabetreue teilen können, berichten Android-Nutzer schon seit Jahren von extremen Qualitätsverlusten bei ihren Bildern. Einer der ältesten Threads, der sich über solche Kopfschmerzen beschwert

wurde hier auf XDA gefunden im September 2012, und der Thread läuft bis heute und bietet den Lesern unorthodoxe Möglichkeiten, die lächerliche Zerstörung von Fotos durch Instagram zu umgehen. Man könnte meinen, dass Instagram diese Probleme nach über zwei Jahren voller Beschwerden, technologischen Verbesserungen bei Software und Hardware sowie Wirtschafts- und Marktwachstum gelöst hätte. Ist es etwas, woran sie schuld sind? Oder liegt die Ursache des Problems tiefer als es scheint?

Ein direkter Blick

Hier ist ein Foto, das ich selbst gemacht habe. Der Originalschuss wiegt 4,34 MB und wurde beschossen 9,6 MP. Ganz zu schweigen vom „Instacrop“-Downsampling, das verständlicherweise die Details einer so hochauflösenden Datei zerstören würde, indem es später auf die native Datei von Instagram herunterskaliert wird 640x640-Pixel-Ausgabe, ich habe sie auf ein JPG mit dem 1:1-Seitenverhältnis von Instagram-Uploads zugeschnitten, um die direkten Auswirkungen des Nachbearbeitungsalgorithmus und seiner Komprimierung darauf zu sehen Datei.

Ich habe mir einfach den quadratischen JPG-Ausschnitt geschnappt und ihn auf meinem Instagram gepostet, ohne Filter, Effekte hinzuzufügen oder Werte anzupassen. Man würde erwarten, dass das Bild dem Original ziemlich ähnlich sieht, aber das Ergebnis war enttäuschend. Die Komprimierungsartefakte an Rändern und Farbverläufen sind selbst für das ungeübte Auge verblüffend wahrnehmbar. Während die Größe der ursprünglichen 1:1-Zuschneidedatei war 1,6 MB, das neue verkleinerte und komprimierte Bild ist 125 KB. Das bedeutet, dass durch die Komprimierung die Dateigröße des Originals fast um den Faktor 1 reduziert wurde 13 - was in manchen Zusammenhängen nicht unbedingt schlecht ist.

Interessanterweise bietet Instagram eine „Hochwertige Bildverarbeitung“ an, die standardmäßig deaktiviert ist. Wenn sie jedoch aktiviert ist, scheinen sich die Ergebnisse nicht wirklich zu verbessern, und die komprimierte Datei bleibt bei 129 KB. Hier stelle ich Ihnen den gleichen Ausschnitt zur Verfügung und Sie können sehen, dass die vorhandene Komprimierung immer noch ziemlich intensiv ist und die Wiedergabetreue des Bildes immer noch einen groben und pixeligen Verlust aufweist.

Kompression

Computeralgorithmen bieten verschiedene Möglichkeiten, die Größe eines Bildes mit verschiedenen Techniken zu reduzieren, die das Bild optimieren

Die Daten müssen später interpretiert werden und das entsprechende Bild auf die entsprechende Weise angezeigt werden. Viele Dateitypen für Bilder sind eng mit den von ihnen unterstützten Komprimierungstechniken verknüpft oder nicht unterstützen - und aus diesem Grund sehen wir bei einigen Bildtypen normalerweise eine bessere Qualität als Andere. PNG (Portable Network Graphics)-Dateien werden normalerweise verwendet, um Medien ohne Einbußen bei Wiedergabetreue und Bildqualität zu teilen, allerdings auf Kosten einer größeren Dateigröße als bei Bildern, die einer verlustbehafteten Komprimierung unterzogen werden. GIF ist ein sehr altes Bildformat, das ebenfalls verlustfrei komprimiert wird.

Techniken zur Reduzierung oder Optimierung der Dateigröße werden von vielen Programmierern im Rahmen ihrer akademischen Tätigkeit erlernt, unabhängig davon, in welchem ​​Bereich sie sich entwickeln werden. Namen wie Deflation (benutzt für PNG) oder der Lempel-Ziv-Welch Algorithmus (normalerweise verwendet für GIF) ziehen heutzutage durch viele Informatik-Klassenzimmer, klingen in den Ohren vieler Programmierer und mit der Weiterentwicklung und Dokumentation immer effizienterer Komprimierungstechniken, Man würde von der Milliardärsplattform erwarten, dass sie einigermaßen effiziente Algorithmen einbaut, um ein sehr schönes Bild zu liefern und gleichzeitig die technischen Details für ihre Server und die Benutzer nicht zu sehr zu belasten Hardware.

Aber das ist einfach nicht der Fall. Die Bilder, die Millionen von Instagrammern und ich jeden Tag machen und hochladen, widersprechen direkt der Erzählung über die technischen Fähigkeiten dieser Menschen Supermächte der Technologiewelt, die einen großen Teil ihres Umsatzes in ihre Software investieren sollen, um den besten Benutzern zu bieten Erfahrung. Aber hier bleibt noch eine Frage unbeantwortet: Warum Android und nicht iOS?

VSCO- und Android-Speicher

Während beliebte Internetforen wie Reddit versuchten, den Grund für ihre tägliche Empörung herauszufinden, schien die Ungerechtigkeit keine andere logische Grundlage zu haben als die mögliche Erklärung dafür, dass Android-Hardware in der Rechenleistungsabteilung grundsätzlich unterlegen ist, oder die Tatsache, dass angesichts der großen Auswahl an Bei Android-Geräten der unteren Preisklasse mussten diese Maßnahmen ergriffen werden, um ein konsistentes Benutzererlebnis auf der gesamten Plattform zu gewährleisten – unabhängig davon, wie viel Sie bezahlt haben dein Telefon. Im Laufe der Monate berichteten die Berichte nach jedem Instagram-Update immer wieder über dasselbe Problem, und zwar auf den Punkt wo dieses Problem zu einem Running Gag unter den Forumbenutzern wurde, der kurz nach jeder Iteration des folgte Anwendung.

Einen ähnlichen Vorfall bemerkten Benutzer auch bei der beliebten Kamera- und Bildbearbeitungsanwendung VSCO Cam. Einige stellten schnell fest, dass die Anwendung, die als „der neue Standard der Android-Fotografie“ angepriesen wurde, diesen Ansprüchen nicht gerecht wurde. Der Qualitätsverlust und die Art der festgestellten Artefakte ähnelten denen von Instagram, sodass einige schnell dachten, dass es eine Linie gibt, die die Punkte verbindet. Bisher gab es nur Spekulationen darüber, was die Ursache für dieses Problem sein könnte. Einige machten direkt die in Android integrierten Bitmap-Downsampling-Algorithmen für das Problem verantwortlich. Was jedoch die überzeugendste Ursache zu sein schien, war die einfache Tatsache, dass Instagram und möglicherweise VSCO über eine schlechte Implementierung eines Downsampling-Algorithmus verfügten, insbesondere des Resampling des nächsten Nachbarn. Doch ohne die offizielle Mitteilung der Entwickler konnte die Spekulation nicht vollständig bestätigt werden.

Da haben wir gelernt Technischer Support von VSCO dass der Grund für ihren Verlust an Auflösung und Wiedergabetreue nicht eine schlechte Softwareimplementierung war, sondern vielmehr eine Speicherbeschränkung in Android-Geräten:

„Der Speicher der meisten Android-Geräte ist recht begrenzt, obwohl einige über mehrere Gigabyte verfügen. Anwendungen dürfen jedoch nicht alle verfügbaren Funktionen nutzen Speicher und daher müssen wir uns mit dem zufrieden geben, was uns von Android gegeben wird.“

„Große Bilder können beim Import um bis zu 50 % verkleinert werden abhängig von dem Gerät, auf dem Sie sich befinden, und dem verfügbaren Speicher.

Sie behaupten auch, dass ihre Bildverarbeitungstechniken sowohl den Speicher als auch den SoC sehr beanspruchen Dies, gepaart mit Android-Speicherbeschränkungen, ist der Grund, warum wir den Qualitätsengpass sehen, den wir nicht finden iOS.

Entsprechend Schulungsartikel für Android-Entwickler, wird eine harte Grenze gesetzt Heap-Größe für jede App um eine funktionierende Multitasking-Umgebung aufrechtzuerhalten. Dies hängt davon ab, wie viel RAM das Gerät zur Verfügung hat, und wenn die App die Heap-Kapazität erreicht, besteht die Gefahr, dass ihr der RAM ausgeht.

Auf den ersten Blick also scheint dass die Geschichte von VSCO fesselnd ist, aber das erklärt nicht einige der Dinge, die die Leute, die den skeptischen Ansatz verfolgen, scheinbar nicht loswerden können.

Einschränkung

Auf einen sehr oberflächlichen Blick können wir folgende Frage stellen: Wenn ein Smartphone typischerweise zwischen 1 GB und 2 GB RAM hat und Die neuesten tragbaren Prozessoren können ein Bild nicht in voller Auflösung verarbeiten. Warum sind DSLR-Kameras mit 32 MB RAM dazu in der Lage? Das?

Wir haben uns an einen unserer Senior Recognized Developer gewandt, um eine fundiertere Meinung zu diesem Thema einzuholen. OmniROM Entwickler XpLoDWilD kommentierte:

„Die Einschränkung liegt hier eher in der Art und Weise, wie das Bild berechnet oder verarbeitet wird. Die GPU ist dafür schneller, und der schnellste Weg, dies zu tun, besteht darin, das Bild als Textur und in die GPU hochzuladen Verarbeiten Sie es – das Problem dabei ist, dass Sie durch die maximale Texturgröße der GPU begrenzt sind, was im Allgemeinen der Fall ist 4096x4096.“

Im Allgemeinen sind 8-MP-Bilder 3264 x 2448 groß und damit klein genug, um in die Grenzen von 4000 x 3000 bis zu 12 MP zu passen. Neuere Flaggschiff- und Kamerahandy-Sensoren können mehr als 13 MP erreichen und haben Bildgrößen, die größer sind als die maximale GPU maximale Texturgröße, die das Bild zwangsläufig innerhalb der Einschränkung verkleinern und insgesamt verlieren müsste Detail.

„Das Problem ist nicht, dass Apps es sind Hochladen einer verkleinerten VersionEs handelt sich jedoch eher um Apps Verarbeiten einer verkleinerten Version des Bildes, und das Hochladen dieser verarbeiteten Datei“, fügte er hinzu. „Wahrscheinlich um die Verarbeitungszeit weiter zu verkürzen, haben sie auch die Auflösung noch niedriger eingestellt.“

XpLoDWilD legt nahe, dass die feine Balance zwischen Bearbeitungszeit Und GPU-Einschränkung Anstatt dem Benutzer eine vollständig verarbeitete Vorschau des Bildes, an dem er gerade arbeitet, zu zeigen, wäre es besser, das Bild zu haben Als Hilfsmittel für den Bearbeitungsprozess kann ein verkleinertes Miniaturbild dienen, das auf den Bildschirm passt (etwas kleiner als 2048 x 2048). Dieses Miniaturbild konnte im Allgemeinen zuverlässig und schnell verarbeitet werden und gab dem Benutzer dennoch eine gute Einschätzung, wie das Bild aussehen wird. Wenn der Benutzer die von ihm bei den Wertanpassungen und der Filterauswahl getroffenen Entscheidungen bestätigt, wird das Bild in voller Auflösung angezeigt im Hintergrund transformiert – indem das Bild in ein Raster mit der Größe der Miniaturbildauflösung aufgeteilt und dann jeder Block verarbeitet wird separat. Der letzte Schritt würde darin bestehen, das endgültige Bild auf der CPU zusammenzusetzen, indem jede Region wieder in eine große Bitmap mit voller Auflösung eingepasst wird.

Dies ist eine Möglichkeit, das Bild in der Originalauflösung zu verarbeiten. Dies ist etwas, was Instagram angesichts der Vorschau, die Sie sehen, bis zum jetzigen Zeitpunkt anscheinend nicht tut Wenn Sie das Bild bearbeiten, weist es nicht die gleiche schreckliche Qualität und die gleichen Artefakte auf wie das Bild, das zum Hochladen bereit ist Bild. Das Vorschaubild scheint keiner brutalen Komprimierung unterzogen zu werden, daher findet die Komprimierung zum Zeitpunkt der Verarbeitung des endgültigen Bildes statt, wodurch das Bild mit geringer Qualität ausgegeben wird.

Die Android-Plattform hat wirklich keine Probleme damit, ein Bild in hoher Auflösung zu verarbeiten und schon gar nicht, es hochzuladen. Hardwareseitig gilt für die neuesten iPhones eine Texturgrößenbeschränkung von 2048 bis 4096. Es handelt sich also wahrscheinlich nicht um eine Hardwarebeschränkung und auch nicht um eine Plattformbeschränkung – da sie von anderen Entwicklern umgangen werden kann und wurde.

Allerdings gab es eine Obergrenze für die Heap-Größe!

Ja, aber nicht ganz. Aufgrund des zusätzlichen Speicherbedarfs für Bilder mit hoher Dichte gibt es eine angemessene Grenze für den Java-Heapspeicher. Nach einiger Recherche habe ich diesen Ausschnitt einer Debatte in einer Google-Gruppe gefunden, die über das Android NDK diskutiert Natives Entwicklungskit, was es Entwicklern ermöglicht, in C/C++ geschriebenen Code wiederzuverwenden, indem sie ihn in Anwendungen einführen Native Java-SchnittstelleDadurch wird die Ausführung der App etwas schneller, da sie direkt auf dem Prozessor und nicht auf einer virtuellen Maschine interpretiert wird.

Im Gespräch kann das sein hier gefunden, Google-Ingenieur und Android Framework-Entwickler Dianne Hackborn klärt einige Missverständnisse über die Speicherbeschränkungen von Android auf. Sie stellt fest, dass „Angesichts der Tatsache, dass es sich um die NDK-Liste handelt, wird Ihnen das Limit eigentlich nicht auferlegt, da es nur für den Java-Heap gilt. Es gibt keine Begrenzung für Zuweisungen im nativen Heap... “. Was die RAM-Nutzung betrifft, kommentiert sie: „Wenn genügend RAM vorhanden ist, werden die Daten im RAM gehalten. Wenn nicht... Na ja, du rennst immer noch“.

Sie sagt auch, dass es nicht nur keine Begrenzung gibt nativer Heap, aber es gibt auch keines dafür GPU-Heap. Es scheint also, dass Android als Ganzes aufgrund der Existenz des NDK wirklich keine Einschränkungen hinsichtlich der Menge an Speicher, allgemeiner Verarbeitung oder GPU, die Sie verwenden können, „auferlegt“.

Aber selbst dann sollte der Java-Heap groß genug für ein Bild seinMONITOR. Ein 13-MP-Bild als unkomprimierte Bitmap (ARGB 8888) würde ungefähr dauern 50 MB. Die standardmäßigen maximalen Heap-Größenbereiche bis zu 256 MB bzw512 MB Abhängig vom Android-Gerät und der darauf ausgeführten Android-Version. Instagram dauert ca 62 MB Im Leerlauf scheint der Anstieg der RAM-Nutzung beim Abrufen und Verarbeiten eines 13-Megapixel-Bilds vernachlässigbar zu sein, wie aus meiner Systemmonitor-Grafik hervorgeht Bei weitem nicht die Grenze, die angeblich „von Android auferlegt“ wird, die aber trotzdem umgangen werden kann und auch durch die Verwendung bestimmter Algorithmen vermieden oder abgemildert werden kann Andere.

Abschluss

Wie bereits erwähnt, erfahren wir möglicherweise nie die ganze Geschichte darüber, was sich hinter den Kulissen dieser Apps abspielt. Aber die Begründungen, die in den Antworten ihrer Macher oder ihrer Apologeten angeführt werden, erscheinen bei genauer Betrachtung einfach nicht ganz plausibel. Das Problem hier scheint eher auf eine mittelmäßige Softwareimplementierung zurückzuführen zu sein als auf die Einschränkungen, die die Hardware oder Software von Android scheinbar bieten könnte.

Die Tatsache, dass es Anwendungen gibt, die die Komprimierung umgehen, sowie die Existenz und der Inhalt einer Dokumentation zum Innenleben von Android, das Potenzial von Aktuelle Android-Hardware und die Meinung von Experten scheinen allesamt darauf hinzudeuten, dass die Ungerechtigkeit, mit der Android-Nutzer konfrontiert werden, entweder vorsätzlich oder zumindest anerkannt ist lösbar.

Ich denke, es ist an der Zeit, dass Android-Nutzer nicht nur die Wahrheit erfahren, sondern auch die Behandlung erfahren, die sie verdienen. Es könnte zwar sein, dass Android-Geräte, massenhaftDa der Durchschnitt und der Median hinsichtlich der Hardware unter denen des iPhones liegen, gibt es keinen Grund, die Standards zu senken und dadurch das Benutzererlebnis aller zu ruinieren. Und da jeder Entwickler der Plattform gebrauchte Reste zur Verfügung stellt, konzentrieren sich die Benutzer zunehmend auf die Entwickler und nicht auf das System – wie es sein sollte.

Gutschrift an PixelPulse für das vorgestellte Bild