Save generated GIF to camera roll?

后端 未结 4 2206
一个人的身影
一个人的身影 2021-02-20 18:39

Thanks for reading. I\'ve created a GIF using methods from this question:

Create and and export an animated gif via iOS?

I\'m trying to use the only method that

相关标签:
4条回答
  • 2021-02-20 18:55

    Has this been updated to work with iOS 9, and the deprecation of ALAssets? I do not see similar calls in PHPhotoLibrary.

    0 讨论(0)
  • 2021-02-20 19:02

    I found the issue was that I was unable to actually grab the GIF from the file. I switched from using CGImageDestinationCreateWithURL to CGImageDestinationCreateWithData and used a CFMutableDataRef to hold the Gif data. I don't know why, but that made saving to camera roll with writeImageDataToSavedPhotosAlbum work.

    0 讨论(0)
  • 2021-02-20 19:02

    Here is an updated answer using PHPhotoLibrary, since ALAssetsLibrary is deprecated.

    I used this answer from another user - 陈星旺

    PHPhotoLibrary save a gif data

    NSString *exportPath = [NSTemporaryDirectory() stringByAppendingString:@"/animated.gif"];
    NSURL *fileURL = [NSURL fileURLWithPath:exportPath isDirectory:NO];
    NSData * gifData = [NSData dataWithContentsOfFile:fileURL.absoluteString];
    
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    
        PHAssetResourceCreationOptions *options = [[PHAssetResourceCreationOptions alloc] init];
        [[PHAssetCreationRequest creationRequestForAsset]
         addResourceWithType:PHAssetResourceTypePhoto
         data:gifData
         options:options];
    
    } completionHandler:^(BOOL success, NSError * _Nullable error) {
    
        if (success) {
            NSLog(@"image saved!");
        } else {
            NSLog(@"error saving image - %@", error ? error.localizedDescription : @"");
        }
    }];
    

    If you needed to download the GIF data from a URL, you could use this:

    NSData *gifData = [NSData dataWithContentsOfURL:theGIFsURL];
    
    0 讨论(0)
  • 2021-02-20 19:05

    **

    Solution 01 : Only saving the existing GIF file to Camera Roll

    **

    As I understand your problem. You are able to generate a GIF file but cannot save and also view it to the Camera Roll.

    So I am attaching a sample test using existing GIF File.

    Step 01. I copied a gif IMG_0009.GIF file in my Application Document directory.

    Step 02 Than I use the below code to load this files NSData:

    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];
    NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:@"IMG_0009.gif"];
    
    NSData *gifData = [NSData dataWithContentsOfFile:[fileURL path]];
    

    Step 03: Now I save the file in the Media Directory:

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library writeImageDataToSavedPhotosAlbum:gifData metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
    
        NSLog(@"Success at %@", [assetURL path] );
    }];
    

    The Asset URL is proper. Now you can check you media directory. you can locate the saved gif image.

    Have Fun :)


    **

    Solution 02: Demo of Creating and saving GIF to Camera roll

    **

    I cloned some solution to show creating and saving of GIF files to Camera Roll. You can download and check my fork at github:

    The demo creates a GIF file by taking 2 or more images and save in the Camera Roll Directory

    https://github.com/bllakjakk/Giraffe

    The main Code to focus is like below:

    [export encodeToFile:tempFile callback:^(NSString * aFile) {
    
        NSLog(@"Path: %@", aFile);
    
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    
        NSData *data = [NSData dataWithContentsOfURL:[[NSURL alloc]initFileURLWithPath:aFile]];
    
        [library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
    
            NSLog(@"Success at %@", [assetURL path] );
        }];
    

    }];

    It uses the library as I mentioned in my solution before http://jitsik.com/wordpress/?p=208

    How to verify:

    Step 01: Run the demo project.

    Step 02: As directed by the application add 2 images and click Export.

    Step 03: Now check the camera roll you will find the created gif.

    Previous:

    GIF is a proprietary format, so you would need a 3rd party lib to save it.

    check following link: http://jitsik.com/wordpress/?p=208

    0 讨论(0)
提交回复
热议问题