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