Как скопировать файл изображения из iOS Photo Library (ALAssetsLibrary) в локальный каталог приложения?

Я могу получить изображения из библиотеки фотографий через ALAssetsLibrary:

void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop){ if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) { // Copy the photo image to the `/Documents` directory of this App here } }; void (^assetGroupEnumerator )(ALAssetsGroup*, BOOL*) = ^(ALAssetsGroup *group, BOOL *stop){ if (group != nil) { [group enumerateAssetsUsingBlock:assetEnumerator]; } }; // fetch ALAssetsLibrary *library = [ALAssetsLibrary new]; [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:^(NSError *error) { NSLog(@"failed"); }]; 

Я хочу скопировать определенные изображения в локальный каталог ( App_home/Documents ), но я не знаю, как точно выполнять эту работу, обрабатывая объекты ALAsset.

3 Solutions collect form web for “Как скопировать файл изображения из iOS Photo Library (ALAssetsLibrary) в локальный каталог приложения?”

Попробуйте следующий код

 ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary alloc] init]; [assetLibrary assetForURL:YourURL resultBlock:^(ALAsset *asset) { ALAssetRepresentation *rep = [asset defaultRepresentation]; Byte *buffer = (Byte*)malloc(rep.size); NSUInteger buffered = [rep getBytes:buffer fromOffset:0 length:rep.size error:nil]; NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];//this is NSData may be what you want [data writeToFile:photoFile atomically:YES];//you can save image later } failureBlock:^(NSError *err) { NSLog(@"Error: %@",[err localizedDescription]); } ]; 

Для получения изображения в каталоге документов

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *newPath = [documentsDirectory stringByAppendingPathComponent:@"Your_Image_Name"]; UIImage *myImg = [UIImage imageWithContentsOfFile:newPath] 

Это может быть полезно для вас. В этом outputFileURL имеет тип NSURL

  NSData *videoData = [NSData dataWithContentsOfURL:outputFileURL]; [data writeToFile:destinationPath atomically:YES];//you can save image later 

Вы можете получить исходный двоичный файл с фотографией ниже и сохранить в целевой файл.

 + (NSData *)photoAssetRawData:(ALAsset *)photoAsset error:(NSError **)error { ALAssetRepresentation *rep = photoAsset.defaultRepresentation; NSMutableData *data = [NSMutableData new]; long long offset = 0; uint8_t dataBuffer[PHOTO_READ_CHUNK_SIZE]; NSError *internalError; do { NSUInteger readByteLength = [rep getBytes:dataBuffer fromOffset:offset length:sizeof(dataBuffer) error:&internalError]; if(internalError != nil) { if(error != NULL) { *error = internalError; } return nil; } offset += readByteLength; [data appendBytes:(void*)dataBuffer length:readByteLength]; } while (offset < rep.size); return data; } 

Одна вещь должна быть в курсе, эти необработанные данные не применили ни одну из фильтров по умолчанию для приложения iOS по умолчанию. Если вы хотите, чтобы этот фильтр применялся, вы должны получить этот фильтр с поддержкой XMP из [ALAssetRepresentation metadata] и создать фильтры с помощью [CIFilter filterArrayFromSerializedXMP: inputImageExtent: error :], затем примените их на полном разрешении, наконец сохраните это обработанное изображение как JPEG или PNG в файл.

Ниже показано, как применять эти фильтры.

 + (CGImageRef)applyXMPFilter:(ALAsset *)asset{ ALAssetRepresentation *rep = [asset defaultRepresentation]; CGImageRef imageRef = [rep fullResolutionImage]; NSString *adjustmentXMP; NSData *adjustmentXMPData; NSError *__autoreleasing error = nil; NSArray *filters=nil; CGRect extend = CGRectZero; //add filter to image ALAssetRepresentation *representation = asset.defaultRepresentation; adjustmentXMP = [representation.metadata objectForKey:@"AdjustmentXMP"]; adjustmentXMPData = [adjustmentXMP dataUsingEncoding:NSUTF8StringEncoding]; extend.size = representation.dimensions; filters = [CIFilter filterArrayFromSerializedXMP:adjustmentXMPData inputImageExtent:extend error:&error]; if(filters) { CIImage *image = [CIImage imageWithCGImage:imageRef]; CIContext *context = [CIContext contextWithOptions:nil]; for (CIFilter *filter in filters) { [filter setValue:image forKey:kCIInputImageKey]; image = [filter outputImage]; } imageRef = [context createCGImage:image fromRect:image.extent]; } return imageRef; } 
  • Отображение изображений более высокого качества для сообщений Facebook для iOS
  • Загрузить изображение с параметрами в Swift
  • Сохранение изображений в Core Data + iCloud - Swift
  • Заполните цвет на определенной части изображения в ios Swift 3.0
  • Как сохранить и перезагрузить изображение с помощью ALAsset?
  • OpenGL ES 2d рендеринг в изображение
  • Как сделать снимок с помощью датчика приближения?
  • GIF не оживляет, когда делится на твиттер
  • Обрезка изображения с помощью JS-плагина | PhoneGap | IOS
  • Как хранить изображения, если контент должен быть синхронизирован с iCloud
  • UIButton с заголовком под изображением
  • Interesting Posts

    Пользовательский UITableViewCells исчезает при прокрутке

    Бесконечный раздел UITableview

    Как я могу активировать, ранее деактивированное ограничение?

    Использование JSQMessagesViewController с Parse.com

    NSNumber хранится в NSUserDefaults

    UIDatePicker покажет только год

    cordova ios resolveLocalFileSystemURL ENCODING_ERR в файле cordova.file.applicationDirectory

    iOS6 – Как очистить кеш экрана / автономного веб-приложения?

    Как перечислить ВСЕ узлы в сцене Sprite Kit?

    iPhone UITableView отсутствует раскрытие-кнопка после нажатия кнопки «Удалить» при повторном использовании UITableViewCell

    UIActivityViewController копирует элемент дважды на iOS 11

    Использование Interface Builder и раскадровки для построения связей между контроллерами

    Изменение внутренних свойств NSObjects (в частности, SKPaymentTransaction)

    Как заменить этот @synchronized (self) код на что-то более эффективное?

    Как вы достигаете эффекта «протирания часов» / радиального протирания в iOS?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.