質問

カメラロールから画像を取得してしばらく使用し、iPhoneでPNGとしてディスクに保存しています。おそらくメモリ不足が原因で、奇妙なクラッシュが発生しています。

PNGまたはJPGとして保存すると違いがありますか(JPGケースの品質を低下させるためにメモを選択した場合)。具体的には:

  • PNGとして保存した場合、UIImageをディスクからリロードした後、UIImageが使用するメモリは増えますか?
  • PNGとして保存すると、保存プロセス中に一時的に多くのメモリが消費される可能性がありますか?

UIImageはフォーマットに依存しない表現であると想定していましたが、問題ではありませんが、検証する必要があると考えました。

役に立ちましたか?

解決

ストアには、編集中の画像の中間バージョンを保存する必要があるアプリケーションがあります。元のバージョンでは、保存にPNG形式を使用し、JPEGを複数回ロードして保存することによる品質の低下を回避しました。

2.2ソフトウェアリリースの前後で、AppleはPNG書き込みコードに変更を導入し、一部の画像からPNGデータを保存するのに何倍も時間がかかるようにしました。終了時に画像を保存しようとしてアプリケーションがタイムアウトしたため、JPEG形式での保存に変更する必要がありました。

また、PNG形式で保存しても" orientation"が保持されないため、問題が発生します。 UIImageの情報です。したがって、内蔵カメラで縦向きで撮影した写真は、保存して再ロードすると回転して表示されます。

他のヒント


  

おそらくメモリ不足が原因で奇妙なクラッシュが発生しています


次に、今何をしているのかをやめ、それが実際にクラッシュの原因であるかどうかを最初に把握します。そうでなければ、ここで間違った問題を追いかけている可能性が非常に高く、クラッシュの本当の原因を無視しながら存在しないメモリの問題を修正します。クラッシュを修正する場合は、クラッシュの原因を解明することから始めます。 「おそらく」とは何かのフォローアップ問題は無駄な時間と労力のレシピです。

処理する画像の種類によって異なります。写真画像を扱う場合、JPEGはほとんどの場合PNGよりも小さくなり、人間の目で見られるような細部の識別可能な損失はありません。

逆に、GUI要素や無地の大きなブロックを含む画像などの非常に非写真的な画像を処理する場合、PNGとJPEGのサイズは同程度になりますが、PNGはロスレスに保存されますが、JPEGは損失が多く、非常に目に見えるアーティファクトがあります。 本当に単純な画像(一定の色の非常に大きなブロックなど)がある場合、PNGはJPEGよりもはるかに小さい可能性が高く、やはり圧縮アーティファクトはありません。

画像をPNGまたはJPEGとして保存する行為は、一時的なメモリをあまり消費しないはずです。画像がメモリ内にある場合、通常はメモリに非圧縮で保存されるため、レンダリングするたびに解凍するのではなく、画面に非常にすばやく描画できます。非圧縮イメージのサイズと比較すると、圧縮に必要な追加の一時ストレージの量は非常に少ないです。圧縮されていない画像をメモリに収めることができれば、圧縮中に使用されるメモリを心配する必要はありません。

そしてもちろん、不揮発性ストレージのファイルシステムにイメージを書き込んで、メモリ内イメージを解放すると、メインを占有しないため、圧縮イメージの大きさは実際には関係ありません。もうメモリ。圧縮イメージのサイズは、使用するフラッシュストレージの量にのみ影響しますが、これは問題になる可能性がありますが、アプリのメモリ不足の可能性には影響しません。

UIImagePickerControllerの既知のメモリリークが原因でクラッシュしている可能性があります。

これは修正に役立ちます。

ハードデータはありませんが、AppleはiPhone OSのほぼすべての場所でPNGを使用しているように見えるため、PNGの方が好ましいと思います。

ただし、PNGを作成するためのコードが既に設定されている場合、JPEGを作成するように変更するのはそれほど難しくないはずです。両方の方法を試して、どちらが良いかを見てください。

可能な限りPNGを使用します。コンパイルの一部として、XCodeはユーティリティ(pngcrush)を介してすべてのPNGファイルを実行し、それらを圧縮および最適化します。

  1. は、リロード後にUIImageによって使用されるより多くのメモリです PNGとして保存した場合のディスク =>いいえ、解像度とチャンネル数が同じ2つの画像からインポートする場合、メモリサイズは同じです。 (RGBAなど)
  2. PNGとしての保存は、保存プロセス中に一時的にメモリを消費する可能性がありますか? =>いいえ、ディスクメモリにのみ影響します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top