I want to get a NSArray with all the UIImage from a Live Photo to create a GIF of that. I tried to make screenshots while animating the live photo but it doesn't work.
Can anyone help me?
Thanks!
            Asked
            
        
        
            Active
            
        
            Viewed 1,831 times
        
    1
            
            
        
        Beeke
        
- 163
 - 1
 - 11
 
- 
                    You will probably have to go through MOV, see [here](http://stackoverflow.com/questions/32508375/apple-live-photo-file-format). – Lior Bar Jun 13 '16 at 15:21
 
2 Answers
1
            
            
        First step, you need convert a Live Photo to Video, using this:
PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes, 
    toFile: fileURL, options: nil, completionHandler: 
  {
     // Video file has been written to path specified via fileURL
  }
Finally, using this library to convert this to GIF, or you can search in google for another way: https://github.com/NSRare/NSGIF
Hope this will help you.
        Cuong Nguyen
        
- 222
 - 3
 - 8
 
1
            
            
        This is what I did to achieve the same thing as you requested.
    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];
                                   }];
    }
        Vikram Sinha
        
- 581
 - 1
 - 10
 - 25