2016-06-13 85 views
1

我想要一个NSArray与所有UIImage从现场照片创建一个GIF。我尝试在制作实况照片的同时制作截图,但不起作用。 任何人都可以帮助我吗? 谢谢!获取来自现场照片的所有图像

+0

你可能不得不通过MOV,见[这里](http://stackoverflow.com/questions/32508375/apple-live-photo-file-format)。 –

回答

1

第一步,你需要转换Live照片到视频,使用这样的:

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

最后,使用这个库将其转换为GIF,或者你可以在谷歌的另一种方式进行搜索:https://github.com/NSRare/NSGIF

希望这会帮助你。

1

这就是我所做的,以达到您要求的相同效果。

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]; 
            }]; 
    }