Я использую 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 секунд на изображение, чтобы выполнить это.И это очень долго.
Вопрос: Как я могу ускорить процесс сохранения изображения?Или, может быть, есть лучшее решение для этого?
ОБНОВЛЕНИЕ: Наилучшим улучшением производительности в обоих решениях является сохранение изображений в формате JPEG вместо PNG.Таким образом, для решения 1 заменили UIImagePNGRepresentation
на UIImageJPEGRepresentation
.Для решения 2 заменили kUTTypePNG
на kUTTypeJPEG
.
Также стоит отметить, что второе решение более эффективно использует память, чем первое.