web-dev-qa-db-ja.com

UIImageJPEGRepresentationを使用する場合、compressionQualityはどうあるべきですか?

ユーザーのライブラリからの写真にフィルターを適用し、それをディスクに書き戻したいのですが。 UIImageJPEGRepresentationを使用しています。この関数はUIImageおよびcompressionQualityの値を0.0〜1.0の範囲で受け取ります。元の品質を保持したいので、1.0に設定します。しかし、これは実際には、元のファイルよりファイルサイズが大きく、かなり大きくさえある画像ファイルを作成することがわかりました。 Appleのサンプル写真編集拡張機能アプリで、品質を常に0.9に設定していることに気付きました。私はそれを試しました、そしてそれは元の写真ファイルサイズに近いファイルサイズを出力します。これは私には意味がありません。誰かがこれを説明できますか?常に0.9を使用することは適切ですか? iOSカメラはその値を使用して圧縮するので、元の品質は0.9ですか?または、より良い品質のものがない場合、なぜ0.9が実際には1.0ではないのですか?

NSData *renderedJPEGData = UIImageJPEGRepresentation(image, 0.9f);
22
Jordan H

これは古い質問であり、おそらく自分でこれを解決したでしょうが、まだ興味がある人がいれば、これが役立つかもしれません。

(私はJPEGのエキスパートではありません)

UIImageJPEGRepresentationは、画像が過去にどのように圧縮されたかを考慮しておらず、当時の画像を圧縮しているだけです。

「ユーザーのライブラリから」の写真について言及している。ユーザーはライブラリに任意のcompressionQualityで圧縮された任意のイメージを含めることができます。

画像を同じファイルサイズに保つには、元々どのように保存されたかを知る必要があります。同じcompressionQualityを使用しても、データが異なるため、ファイルサイズが異なる可能性があります。圧縮されているのは異なります。

画像の保存に0.9のcompressionQualityを使用することに関しては、画像の品質をどの程度重視するか、使用するスペースの量に依存します。 0.7は、良いバランスとして提案されることが多いようです。

IOSのカメラアプリが画像を圧縮する程度(あるとしても)がわかりません。また、可能な限り最高の品質であることが保証されているかどうかもわかりません。 0.9を使用している場合は、常に写真を撮って保存する前に圧縮率を下げるアプリを作成できます。

お役に立てば幸いです。

1
Josh Paradroid