2016-06-13 26 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]; 
            }]; 
    } 
相關問題