2

JPEG 圧縮を使用して NSData に圧縮された画像があります。でアクセスし[UIImage imageWithContentsOfFile:]ます。ただし、画像が大きい場合、これには数秒かかります。イメージがバンドルからロードされるのと同じ速度で、ファイル システムからイメージをロードするより高速な方法はありますか? そうでない場合、低品質のバージョンを保存する以外に、完全な品質のバージョンが読み込まれている間、一時的に画像の低品質のバージョンを読み込む方法はありますか?

4

2 に答える 2

3

JPEG 2000 を使用してこのようなものを構築できるかもしれませんが (ここで説明したように jpeg ライブラリの独自のコピーを構築し、読み取りコードを手書きする必要があります)、私はあなたがそうするつもりはないと思います。そこに良い投資収益率を得るために。ディスクからデータを読み取るコストは、依然として他のすべてを圧倒する可能性があります。

まず、バンドルから読み取る場合は、可能な限り PNG を使用してください。iOS は、バンドルに保存されている PNG を高度に最適化します (コピー プロセスの一部は、iOS 固有の最適化された形式でそれらを書き換えることです)。

何をするにしても、プレースホルダーが必要な場合は、別のファイルとして、または自分で読み取って管理するカスタムファイル形式として、何らかの方法で自分で提供する必要があるでしょう。これを考案するのは信じられないほど難しい形式ではありませんが、事前にどこかですべてのサイズ変更を行う必要があります。

重要な点は、大きな画像ファイルの読み取りはコストがかかるため、メイン スレッドで行うべきではないということです。バックグラウンド キュー (GCD または操作) でこの作業を行い、データが利用可能になったときに UI を更新する必要があります。この事実を回避する簡単な方法はありません。

于 2012-10-02T23:47:29.067 に答える
-1

低品質は他のファイルよりも小さいファイルです...アプリのドキュメントフォルダー内のファイルを確認するコードは次のとおりです。

NSFileManager *manager = [NSFileManager defaultManager]; 
if ([manager fileExistsAtPath:path]) { 
    NSDictionary *attributes = [manager attributesOfItemAtPath:path error:nil]; 
    unsigned long long size = [attributes fileSize]; 
    resultlbl.text = [NSString StringWithFormat:@"%d",size];
} 
于 2012-10-02T23:24:27.707 に答える