回答:
PNGはピクセルパーフェクト(非可逆)であり、表示するために追加のCPUエネルギーをほとんど必要としません。ただし、大きなPNGは、圧縮された画像フォーマットよりもストレージからの読み取りに時間がかかるため、表示に時間がかかる場合があります。
JPGは保存するには小さくなりますが、損失が多く(量は圧縮レベルに依存します)、それらを表示するには、はるかに複雑なデコードアルゴリズムが必要です。しかし、通常の写真では、通常の圧縮と画質で十分です。
写真や大きなものにはJPGを使用し、小さなものやPNGは「ピクセルパーフェクト」(小さなアイコンなど)に表示したり、合成された透明オーバーレイの一部として表示するように設計したりします。
Appleは、iPhoneアプリバンドルに含まれているPNG画像を最適化します。実際、iPhoneはカラーバイトがハードウェア用に最適化された特別なエンコーディングを使用しています。XCodeは、プロジェクトをビルドするときにこの特別なエンコーディングを処理します。そのため、iPhoneでPNGを使用することには、サイズに関する考慮事項以外の追加の利点があります。このため、インターフェースの一部として表示されるすべての画像(テーブルビュー、ラベルなど)にはPNGを使用することをお勧めします。
写真のようなフルスクリーン画像を表示することに関しては、それらは非可逆であり、視覚的品質は画像をデコードする際のリソースの使用は言うまでもなくJPGよりも優れているため、PNGを使用してもメリットを享受できます。ファイルサイズの実際の利点を確認するために、JPGの品質を下げる必要がある場合がありますが、最適でない画像を表示しています。
ファイルサイズは確かに要因ですが、画像フォーマットを選択する際には、他にも考慮すべき点があります。
PNGについて考慮すべき重要なことが1つあります。XcodeビルドにPNGが含まれている場合は、iOS用に最適化されます。これはPNGクラッシュと呼ばれます。実行時にPNGがダウンロードされた場合、PNGは圧縮されません。押しつぶされたPNGは、100%JPGとほぼ同じように実行されます。低品質のJPGは、高品質のJPGよりも適切に実行されます。したがって、パフォーマンスの観点から、最も速いものから最も遅いものまで、低品質のJPG、高品質のJPG、PNGクラッシュ、PNGになります。
PNGをダウンロードする必要がある場合は、ダウンロード前にサーバー上のPNGを粉砕することを検討してください。
http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
Cocoaneticsは素敵なiOSのパフォーマンスベンチマーク、公開ブログ で破砕することなく、様々な品質レベル、およびPNG画像のJPGのみのを。
彼の結論から:
絶対にアルファチャネルが必要な場合、またはPNGを使用する必要がある場合は、pngcrushツールをWebサーバーにインストールし、すべてのPNGを処理することをお勧めします。他のほとんどすべての場合、高品質のJPEGは、小さいファイルサイズ(つまり、高速転送)と高速圧縮およびレンダリングを組み合わせています。
PNGは、UI要素に使用する小さな画像に最適ですが、カタログや雑誌などのフルスクリーンアプリケーションに使用するのは妥当ではありません。そこでは、ソースマテリアルに応じて60〜80%の圧縮品質を選択します。
すべてを表示するという点では、キャッシュされた非圧縮バージョンのファイルが含まれているため、一度描画したUIImageインスタンスにハングアップする必要があります。そして、大きな画像が画面に表示されるのを視覚的に一時停止しない場合は、事前にいくつかの画像を強制的に解凍する必要があります。ただし、これらは大量のRAMを消費し、それを過度に実行するとアプリが終了する可能性があることに注意してください。NSCacheは、RAMが不足したときに自動的に画像を追い出すため、頻繁に使用される画像を配置するのに最適な場所です。
画像を解凍する必要があるかどうかを知る方法がないのは残念です。また、この影響について通知せずに、画像が非圧縮バージョンを追い出した可能性もあります。それはAppleのバグ報告サイトで調達するのに良いレーダーかもしれません。ただし、幸いなことに、画像がすでに解凍されている場合は、上記のように画像にアクセスするのに時間がかかりません。つまり、「ジャストインタイム」だけでなく、「ジャストインジャズ」も可能です。
少し解凍パフォーマンスデータを共有すると思いました...
私は360度ビューアーのプロトタイピングを行っています。これは、ユーザーがさまざまな角度から撮影した一連の写真を回転させて、オブジェクトをスムーズに回転できるような印象を与えるカルーセルです。
画像データをNSDataの配列にロードして、方程式からファイルI / Oを取り出しましたが、オンザフライでNSImageを作成しています。ほぼ最大フレームレート(約25 fps)でのテストとInstrumentsでの観察アプリは明らかにCPUに依存しており、CPU負荷が約10%増加し、約275 kbのpngと約75 kbのjpgを示しています。
はっきりとは言えませんが、CPUの制限は、一般的なプログラムの実行とすべてのデータのメモリ内での移動に起因していると思いますが、その画像の解凍はGPUで行われます。どちらの方法でも、JPGとPNGのパフォーマンス引数は、特にファイルサイズが小さい(したがって、少なくともチェーンの一部のメモリ内のオブジェクトのサイズが小さい)場合、JPGを優先するように見えます。
もちろん、すべての状況は異なります。テストに代わるものはありません...
透過を使用したい場合は、PNG以外の選択肢はないと思います。ただし、背景がすでに不透明な場合は、JPGを使用できます。それが私が見ることができる唯一の違いです
適切な形式でアートワークを作成するセクションのヒューマンインターフェイスガイドラインで説明されている「写真にJPEGを使用する」。