2

iPhoneアプリでは、標準のHTTPリクエストを使用してJPGイメージをサーバーから読み込みます。データはNSDataとして返されます。これは[UIImage imageWithData:responseData]関数を使用してUIImageに変換できます。私の質問は、元のNSDataに戻って私のイメージのUIImage表現を変換できますか?私はUIImageJPEGRepresentation()関数について知っていますが、compressionQualityを1にしようとしましたが、これは元のNSDataとは何か違うものを与えました。NSDataからUIImageへの変換の逆数ですか?

答えて

3

UIImageがJPEG形式で内部的に保存されていない可能性が高いと思います(実際は)。 JPEG圧縮の仕組みのせいで、JPEGへの変換がまったく同じデータを与える可能性は低いです。元のNSDataをぶら下げることができない理由はありますか?

+0

問題は、PhotoShopでJPGを繰り返し開いて保存することに似ていると思います。ロッシー圧縮化合物とあなたは決して同じイメージを持っていません。 NSDataを保持したくない理由は、CoreDataのパフォーマンス(BLOBとして格納する)のためです。しかし、私はちょうど私の問題の解決策を概説http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/Articles/cdPerformance.htmlに出くわしました。あなたのご意見ありがとうございます。 – chris

2

UIImagePNGRepresentation()を使用し、ファイルをPNG形式でデバイスに送信する必要があります。 PNGは、デバイスにロードして保存する方がはるかに効率的です。これは、バイト配列(NSData)をイメージに/から変換することのstandard methodです。

JPEGデータが残っている場合は、UIImageJPEGRepresentation()を使用してNSDataオブジェクトに戻すことができます。 Appleがその方法をどのように実装したかによって、技術的には依然として同じイメージ(同じものをレンダリングする)の間にデータの一部を更新することができるという点で、同一ではない可能性があります。

+0

私は同意します。しかし残念ながら、Webサーバー上の私のソースはJPEGであり、UIImageを最初にダウンロードしたのと同じNSData表現に戻したいと思います。 – chris

+0

jpeg – RyanR

+0

の回答が更新されました。作成したJPEGが同一ではないことが間違いないと思いますが、これが問題です。私は不可逆圧縮を複雑にすることについて心配しています。唯一の解決策はNSDataを保存することだと私は今やっていると思います。応答していただきありがとうございます。 – chris

関連する問題