私はそのような画像を取得するためにALAssetを使用しています:
[[asset defaultRepresentation] fullResolutionImage]]
これは、できるだけ早くディスクに保存したい CGImageRef を返します...
解決策 1:
UIImage *currentImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
NSData *currentImageData = UIImagePNGRepresentation(currentImage);
[currentImageData writeToFile:filePath atomically:YES];
解決策 2:
CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:filePath];
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);
CGImageDestinationAddImage(destination, [[asset defaultRepresentation] fullResolutionImage], nil);
CGImageDestinationFinalize(destination);
問題は、どちらの方法もデバイス上での実行が非常に遅いことです。これを実行するには、画像ごとに約 2 秒かかります。そして、これは絶対に長すぎます。
質問: この画像保存プロセスをスピードアップするにはどうすればよいですか? または、これに対するより良い解決策はありますか?
更新:
両方のソリューションで最もパフォーマンスが向上するのは、画像を PNG ではなく JPEG 形式で保存することです。そのため、ソリューション 1 は に置き換えられUIImagePNGRepresentation
ましたUIImageJPEGRepresentation
。ソリューション 2 は に置き換えkUTTypePNG
ましたkUTTypeJPEG
。
また、2 番目のソリューションは、最初のソリューションよりもメモリ効率が高いことにも注意してください。