it-swarm.com.de

Wann wird PNG oder JPG in der iPhone-Entwicklung verwendet?

Ich habe eine App, die eine Reihe von Bildern in einer Diashow anzeigt. Diese Bilder sind Teil des Bundles und werden daher mit der App verteilt. 

Alle Bilder sind Fotografien oder Fotos usw.

Ich habe gelesen, dass es bevorzugt ist, PNG als Bildformat zu verwenden, aber da die JPG-Version viel kleiner ist, möchte ich das lieber verwenden.

Gibt es Richtlinien, welches Format in welchem ​​Fall verwendet werden soll?

92
Maverick

PNGs sind pixelgenau (verlustfrei) und benötigen nur wenig zusätzliche CPU-Energie für die Anzeige. Es kann jedoch länger dauern, dass große PNGs aus dem Speicher lesen als komprimiertere Bildformate, und daher langsamer angezeigt werden.

JPGs sind kleiner zu speichern, aber verlustbehaftet (die Menge hängt vom Komprimierungsgrad ab), und um sie anzuzeigen, ist ein viel komplizierterer Dekodierungsalgorithmus erforderlich. Die typische Komprimierung und Bildqualität ist jedoch für Fotos normalerweise ausreichend.

Verwenden Sie JPGs für Fotos und für große Objekte und PNGs für alles, was klein ist und/oder als "pixelgenau" (z. B. kleine Symbole) oder als Teil einer zusammengesetzten transparenten Überlagerung usw. angezeigt werden soll.

136
hotpaw2

Apple optimiert PNG-Bilder, die in Ihrem iPhone-App-Paket enthalten sind. Tatsächlich verwendet das iPhone eine spezielle Codierung, bei der die Farbbytes für die Hardware optimiert sind. XCode behandelt diese spezielle Codierung für Sie, wenn Sie Ihr Projekt erstellen. Sie sehen also zusätzliche Vorteile bei der Verwendung von PNG-Dateien auf einem iPhone, die nicht die Größe der Festplatte betreffen. Aus diesem Grund wird auf jeden Fall empfohlen, PNGs für alle Bilder zu verwenden, die als Teil der Benutzeroberfläche angezeigt werden (in einer Tabellensicht, Beschriftungen usw.). 

Wenn Sie ein Vollbild wie ein Foto anzeigen, können Sie mit PNGs dennoch Vorteile erzielen, da diese nicht verlustbehaftet sind und die visuelle Qualität besser sein sollte als ein JPG. Möglicherweise müssen Sie die Qualität Ihrer JPGs herabsetzen, um einen echten Vorteil bei der Dateigröße zu erzielen, aber dann werden nicht optimale Bilder angezeigt.

Die Dateigröße ist sicherlich ein Faktor, aber bei der Auswahl eines Bildformats gibt es noch andere Überlegungen. 

20
shanezilla

Bei PNGs ist eine wichtige Sache zu beachten. Wenn in Ihrem Xcode-Build eine PNG-Datei enthalten ist, wird diese für iOS optimiert. Dies wird als PNG-Crush bezeichnet. Wenn Ihr PNG zur Laufzeit heruntergeladen wird, wird es nicht beschädigt. Zerquetschte PNGs laufen ungefähr genauso ab wie 100% JPGs. JPGs mit niedrigerer Qualität laufen besser als JPGs mit höherer Qualität. Unter dem Gesichtspunkt der Leistung, vom schnellsten zum langsamsten, würden JPG mit niedriger Qualität, JPG mit hoher Qualität, PNG Crushed und PNG gehen.

Wenn Sie PNGs herunterladen müssen, sollten Sie vor dem Download die PNGs auf dem Server unterdrücken.

http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/

11
respectTheCode

Der Cocoanetics Blog veröffentlichte einen Nice iOS Performance Benchmark von JPGs mit verschiedenen Qualitätsstufen und PNGs mit und ohne Kompromisse.

Aus seinem Fazit:

Wenn Sie unbedingt einen Alphakanal benötigen oder mit PNGs gehen müssen, dann Es ist ratsam, das Pngcrush-Tool auf Ihrem Webserver und .__ zu installieren. lassen Sie alle Ihre PNGs verarbeiten. In fast allen anderen Fällen von hoher Qualität JPEGs kombinieren kleinere Dateigrößen (d. H. Schnellere Übertragung) mit schnellere Komprimierung und Wiedergabe.

Es stellt sich heraus, dass PNGs hervorragend für kleine Bilder geeignet sind, die Sie verwenden würden für Elemente der Benutzeroberfläche, die jedoch nicht für vollständige .__ verwendet werden können. Bildschirmanwendungen wie Kataloge oder Zeitschriften. Dort würden Sie wollen Wählen Sie eine Kompressionsqualität zwischen 60 und 80%, abhängig von Ihrem Quellenmaterial.

Um alles anzuzeigen, sollten Sie an UIImage-Instanzen, von denen Sie einmal gezeichnet haben, weil diese eine .__ haben. unkomprimierte Version der darin enthaltenen Datei zwischengespeichert. Und wo Sie nicht sind. Die visuelle Pause, nach der ein großes Bild auf dem Bildschirm angezeigt wird, wird angezeigt Dekompression für ein paar Bilder im Voraus erzwingen. Aber tragen Sie in Beachten Sie, dass dies große Mengen von RAM erfordert und wenn Sie .__ sind. Wenn Sie es übertreiben, kann dies dazu führen, dass Ihre App beendet wird. NSCache ist ein Ein großartiger Ort, um häufig verwendete Bilder zu platzieren, da dies automatisch kümmert sich um das Vertreiben der Bilder, wenn RAM knapp wird.

Es ist bedauerlich, dass wir keine Möglichkeit haben zu wissen, ob ein Bild muss noch dekomprimiert werden oder nicht. Auch ein Bild könnte die unkomprimierte Version geräumt hat, ohne uns dies mitzuteilen bewirken. Das könnte ein guter Radar sein, der bei der Fehlerberichterstattung von Apple angesprochen werden soll Seite? ˅. Zum Glück dauert es jedoch keine Zeit, auf das Bild wie oben gezeigt zuzugreifen wenn das Bild bereits dekomprimiert ist. Also könntest du das einfach nicht nur „just in time“, aber auch „nur für den Fall“.

8
Nate

Ich dachte nur, ich würde ein bisschen Dekompressionsdaten teilen ...

Ich mache ein Prototyping eines 360-Grad-Viewers - eines Karussells, in dem der Benutzer eine Reihe von Fotos aus verschiedenen Winkeln durchgehen kann, um den Eindruck zu vermitteln, ein Objekt reibungslos drehen zu können.

Ich habe die Bilddaten in ein Array von NSData geladen, um Datei-E/A aus der Gleichung zu entfernen, aber NSImage's on the fly zu erstellen. Beim Testen mit fast maximaler Bildrate (~ 25 fps) und beim Anschauen in Instruments sehe ich, dass die App eindeutig an die CPU gebunden ist und die CPU-Auslastung um etwa 10% ansteigt. Dies zeigt ~ 275 kb png gegenüber ~ 75 kb jpg.

Ich kann nicht mit Sicherheit sagen, aber ich schätze, dass die CPU-Begrenzung nur von der allgemeinen Programmausführung und dem Verschieben aller Daten im Speicher abhängt, aber diese Dekomprimierung erfolgt auf der GPU. In beiden Fällen scheint das Argument JPG vs. PNG Performance JPG zu bevorzugen, insbesondere wenn die kleineren Dateigrößen (und daher auch die kleineren Objekte im Speicher mindestens in einigen Teilen der Kette) berücksichtigt werden.

Natürlich ist jede Situation anders, es gibt keinen Ersatz für das Testen ...

7
Nigel Flack

Ich habe große Unterschiede in der Animationsleistung bei der Verwendung von JPEGs und PNGs festgestellt. Wenn Sie beispielsweise drei bildschirmgroße JPEG-Dateien nebeneinander in einem UIScrollView platzieren und auf einem iPhone4 horizontal scrollen, führt dies zu Verzögerungen und einer völlig unangenehmen ruckartigen Animation. Bei nicht transparenten Png-Elementen mit den gleichen Abmessungen ist das Scrollen glatt. Ich verwende niemals JPEG-Dateien, selbst wenn das Bild groß ist.

5
Undistraction

Ich denke, wenn Sie transparent verwenden wollen, haben Sie keine andere Wahl als PNG. Wenn Ihr Hintergrund jedoch bereits undurchsichtig ist, können Sie JPG verwenden. Das ist der einzige Unterschied, den ich sehen kann

1
vodkhang

"Verwenden Sie JPEG für Fotos", wie in Richtlinien zur Benutzeroberfläche unter Abschnitt Produzieren Sie Grafiken im entsprechenden Format.

0