web-dev-qa-db-ja.com

iPhone開発でPNGまたはJPGを使用する場合

スライドショーでたくさんの画像を表示するアプリを持っています。これらの画像はバンドルの一部となり、アプリとともに配信されます。

すべての画像は写真または写真などです。

画像形式としてPNGを使用することをお勧めしますが、JPGバージョンがはるかに小さくなることがわかったため、それを使用したいと思います。

使用する形式とその場合のガイドラインはありますか?

94
Maverick

PNGは完璧なピクセル(非損失性)であり、表示に余分なCPUエネルギーはほとんど必要ありません。ただし、大きなPNGは、圧縮された画像形式よりもストレージからの読み取りに時間がかかるため、表示に時間がかかる場合があります。

JPGは保存するために小さくなりますが、損失があり(量は圧縮レベルに依存します)、それらを表示するには、はるかに複雑なデコードアルゴリズムが必要です。しかし、通常の写真では、通常の圧縮と画質で十分です。

写真や大きなものにはJPGを使用し、小さなものや「ピクセルパーフェクト」(小さなアイコンなど)または合成透明オーバーレイの一部として表示されるように設計されたものにはPNGを使用します。

139
hotpaw2

Appleは、iPhoneアプリバンドルに含まれるPNG画像を最適化します。実際、iPhoneはハードウェアに合わせて色バイトが最適化された特別なエンコーディングを使用しています。 XCodeは、プロジェクトをビルドするときにこの特別なエンコーディングを処理します。そのため、サイズを考慮すること以外に、iPhoneでPNGを使用することによる追加の利点があります。このため、インターフェイスの一部として表示される画像(テーブルビュー、ラベルなど)にはPNGを使用することをお勧めします。

写真などのフルスクリーン画像を表示する場合、PNGは損失がなく、画像をデコードする際のリソースの使用はもちろんのこと、視覚的な品質がJPGよりも優れているため、PNGの利点を享受できます。ファイルサイズの実際の利点を確認するには、JPGの品質を下げる必要があるかもしれませんが、最適でない画像を表示しています。

ファイルサイズは確かに要因ですが、画像形式を選択する際には、他の考慮事項もあります。

20
shanezilla

PNGについて考える重要なことが1つあります。 PNGがXcodeビルドに含まれている場合、iOS用に最適化されます。これはPNGクラッシュと呼ばれます。実行時にPNGがダウンロードされた場合、クラッシュすることはありません。押しつぶされたPNGは、100%JPGとほぼ同じように動作します。低品質のJPGは、高品質のJPGよりも動作します。そのため、パフォーマンスの観点から、最速から最速まで、低品質のJPG、高品質のJPG、PNGクラッシュ、PNGになります。

PNGをダウンロードする必要がある場合は、ダウンロードする前にサーバー上のPNGを圧縮することを検討してください。

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

11
respectTheCode

Cocoaneticsブログが公開したiOSの素敵なパフォーマンスベンチマーク さまざまな品質レベルのJPG、および粉砕の有無にかかわらずPNG。

彼の結論から:

絶対にアルファチャネルが必要な場合、またはPNGを使用する必要がある場合は、Webサーバーにpngcrushツールをインストールし、すべてのPNGを処理することをお勧めします。他のほとんどすべての場合、高品質のJPEGは、より小さなファイルサイズ(つまり、より高速な送信)とより高速な圧縮およびレンダリングを組み合わせます。

PNGはUI要素に使用する小さな画像には適していますが、カタログや雑誌などのフルスクリーンアプリケーションに使用するのは合理的ではありません。そこで、ソース素材に応じて60〜80%の圧縮品質を選択します。

すべてを表示するには、キャッシュされた非圧縮バージョンのファイルがあるため、一度描画したUIImageインスタンスにハングアップする必要があります。また、大きな画像が画面に表示されるまで視覚的に一時停止しない場合は、事前にいくつかの画像の圧縮を強制的に解除する必要があります。しかし、これらは大量のRAMを必要とし、それをやりすぎるとアプリが終了する可能性があることに注意してください。 RAMが不足した場合に画像を追い出すことに注意してください。

画像の圧縮解除が必要かどうかを知る方法がないのは残念です。また、この効果について通知せずに、画像が非圧縮バージョンを削除した可能性があります。これは、Appleのバグ報告サイトで提起する良いレーダーかもしれません。しかし、画像が既に解凍されている場合、幸いなことに上記のように画像にアクセスするのに時間がかかりません。そのため、「ジャストインタイム」だけでなく、「ジャストインケース」も実行できます。

8
Nate

ちょっとした減圧性能データを共有すると思った...

360度ビューアーのプロトタイプを作成しています。ユーザーがさまざまな角度から撮影した一連の写真を回転させて、オブジェクトをスムーズに回転できる印象を与えるカルーセルです。

NSDataの配列に画像データをロードして、式からファイルI/Oを取り出しますが、NSImageをその場で作成します。ほぼ最大フレームレート(〜25 fps)でテストし、Instrumentsで見ると、アプリは明らかにCPUにバインドされており、CPU負荷が約10%増加し、〜275 kb pngと〜75 kb jpgを示しています。

確かに言うことはできませんが、CPUの制限は一般的なプログラムの実行とメモリ内のすべてのデータの移動によるものであると推測しますが、そのイメージの解凍はGPUで行われます。どちらの場合でも、特に小さいファイルサイズ(したがって、少なくともチェーンの一部でメモリ内のオブジェクトのサイズが小さい)が考慮される場合、JPGとPNGのパフォーマンスの議論はJPGを優先するように見えます。

もちろん、状況はすべて異なります。テストに代わるものはありません...

7
Nigel Flack

Jpegsとpngを使用すると、アニメーションのパフォーマンスに大きな違いがあることがわかりました。たとえば、3つの画面サイズのjpegをUIScrollViewに並べて配置し、iPhone4で水平にスクロールすると、遅れが発生し、ぎくしゃくしたアニメーションになります。同じサイズの非透過pngを使用すると、スクロールがスムーズになります。画像が大きい場合でも、JPEGは使用しません。

5
Undistraction

透明を使用する場合、PNG以外の選択肢はないと思います。ただし、背景が既に不透明な場合は、JPGを使用できます。それが唯一の違いです

1
vodkhang

ヒューマンインターフェイスガイドライン セクションの下に記載されている「写真にJPEGを使用」適切な形式でアートワークを作成します。

0