Получить все изображения из Live Photo

Я хочу получить NSArray со всеми UIImage из живого фото, чтобы создать GIF этого. Я пытался сделать скриншоты во время анимации живого фото, но это не сработало. Может кто-нибудь мне помочь? Спасибо!

2 ответа

Первый шаг, вам нужно конвертировать живое фото в видео, используя это:

PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes, 
    toFile: fileURL, options: nil, completionHandler: 
  {
     // Video file has been written to path specified via fileURL
  }

Наконец, используйте эту библиотеку, чтобы преобразовать ее в GIF, или вы можете искать в Google другим способом: https://github.com/NSRare/NSGIF

Надеюсь, что это поможет вам.

Это то, что я сделал, чтобы добиться того же, о чем вы просили.

    PHFetchOptions *options = [[PHFetchOptions alloc] init];
    options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
    options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %d", PHAssetMediaTypeImage];
    options.predicate = [NSPredicate predicateWithFormat:@"mediaSubtype == %d", PHAssetMediaSubtypePhotoLive];
    options.includeAllBurstAssets = NO;
    PHFetchResult *allLivePhotos = [PHAsset fetchAssetsWithOptions:options];
    NSLog(@"Get total live count : %ld",(unsigned long)allLivePhotos.count);
    NSMutableArray *arrAllLiveImagesGroups = [NSMutableArray array];

    for (PHAsset *asset in allLivePhotos) {
        [asset requestContentEditingInputWithOptions:nil
                                   completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
                                       NSURL *urlMov = [contentEditingInput.livePhoto valueForKey:@"videoURL"];

                                       NSMutableArray *arrLive = [NSMutableArray array];
                                       NSMutableArray *arrSingleLiveImagesGroup = [NSMutableArray array];
                                       AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:urlMov options:nil];
                                       AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
                                       generator.requestedTimeToleranceAfter =  kCMTimeZero;
                                       generator.requestedTimeToleranceBefore =  kCMTimeZero;

                                       for (Float64 i = 0; i < CMTimeGetSeconds(asset.duration) *  5 ; i++){
                                           @autoreleasepool {
                                               CMTime time = CMTimeMake(i, 5);
                                               NSError *err;
                                               CMTime actualTime;
                                               CGImageRef image = [generator copyCGImageAtTime:time actualTime:&actualTime error:&err];
                                               UIImage *generatedImage = [[UIImage alloc] initWithCGImage:image scale:1.0 orientation:UIImageOrientationDown];
                                               [arrLive addObject:generatedImage];
                                               CGImageRelease(image);
                                           }
                                       }
                                       [arrSingleLiveImagesGroup addObject:arrLive];
                                       [arrAllLiveImagesGroups addObject:arrSingleLiveImagesGroup];
                                   }];
    }
Другие вопросы по тегам