(FWD) HOW DO I GET THE FILE PATH OF AN IMAGE SAVED WITH UIIMAGEWRITETOSAVEDPHOTOSALBUM()?

 

問題:如何取得拍照後,把 camera 的 image 存進 album, 但是並不知道 asset 的位置或實體 image filepath, 解法是透過 ALAssetsLibrary 來實作。

I’m saving a merged image to the iPhone photo library using:
UIImageWriteToSavedPhotosAlbum(viewImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), nil);
And getting the callback using:
- (void) savedPhotoImage:(UIImage*)image didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo { NSLog(@"%@", [error localizedDescription]);
NSLog(@"info: %@", contextInfo);}

===================
解法:
===================
URL:
http://stackoverflow.com/questions/4457904/iphone-how-do-i-get-the-file-path-of-an-image-saved-with-uiimagewritetosavedpho

However in ios4 Apple put in a new framework to handle the photo library called the ALAssetsLibrary.
First you need to right click on the Targets and in the build part, add the AlAsset Framework to your project with the little + icon in the bottom left.
Then add #import "AssetsLibrary/AssetsLibrary.h"; to the header file of your class.
Finally you can use the following code:
UIImage *viewImage = YOUR UIIMAGE  // --- mine was made from drawing context
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];  
// Request to save the image to camera roll  
[library writeImageToSavedPhotosAlbum:[viewImage CGImage] orientation:(ALAssetOrientation)[viewImage imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){  
    if (error) {  
        NSLog(@"error");  
    } else {  
            NSLog(@"url %@", assetURL);  
    }  
}];  
[library release];
And that gets the path of the file you just saved.
====================

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];

    imageURL = nil;

    ALAssetsLibraryWriteImageCompletionBlock completeBlock = ^(NSURL *assetURL, NSError *error){
        if (!error) {  
            #pragma mark get image url from camera capture.
            imageURL = [NSString stringWithFormat:@"%@",assetURL];

        }  
    };

    if(image){
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
        [library writeImageToSavedPhotosAlbum:[image CGImage] 
                                  orientation:(ALAssetOrientation)[image imageOrientation] 
                              completionBlock:completeBlock];
    }
}
in .h import Library and define type def of ALAssetsLibraryWriteImageCompletionBlock
#import <UIKit/UIKit.h>
#import <AssetsLibrary/AssetsLibrary.h>

typedef void (^ALAssetsLibraryWriteImageCompletionBlock)(NSURL *assetURL, NSError *error);
if you don’t know how to get <AssetsLibrary/AssetsLibrary.h>, please add existing framework (AssetsLibrary.framework)

===================
別人的範例:
===================

iPhone: How do I get the file path of an image saved with UIImageWriteToSavedPhotosAlbum()?
UIImageWriteToSavedPhotosAlbum(viewImage, self, @selector(savedPhotoImage:didFinishSavingWithError:contextInfo:), nil);
 
– (void) savedPhotoImage:(UIImage*)image didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo { NSLog(@”%@”, [error localizedDescription]);
NSLog(@”info: %@”, contextInfo);}
 
UIImage *viewImage = YOUR UIIMAGE  // — mine was made from drawing context
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];  
// Request to save the image to camera roll  
[library writeImageToSavedPhotosAlbum:[viewImage CGImage] orientation:(ALAssetOrientation)[viewImage imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){  
    if (error) {  
        NSLog(@”error”);  
    } else {  
            NSLog(@”url %@”, assetURL);  
    }  
}];  
[library release];
 
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
 
    imageURL = nil;
 
    ALAssetsLibraryWriteImageCompletionBlock completeBlock = ^(NSURL *assetURL, NSError *error){
        if (!error) {  
            #pragma mark get image url from camera capture.
            imageURL = [NSString stringWithFormat:@”%@”,assetURL];
 
        }  
    };
 
    if(image){
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
        [library writeImageToSavedPhotosAlbum:[image CGImage] 
                                  orientation:(ALAssetOrientation)[image imageOrientation] 
                              completionBlock:completeBlock];
    }
}
 
#import <UIKit/UIKit.h>
#import <AssetsLibrary/AssetsLibrary.h>
 
typedef void (^ALAssetsLibraryWriteImageCompletionBlock)(NSURL *assetURL, NSError *error);
 
– (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo {
 
    RandomIndexnew = arc4random() % 3;
    if(RandomIndexnew == 0)
    {
        nameStr =[NSString stringWithFormat:@”jpg”];
        textFieldNormalFile_type.text =[NSString stringWithFormat:@”jpg”];
    }
    else if(RandomIndexnew = 1)
    {
        nameStr =[NSString stringWithFormat:@”gif”];
        textFieldNormalFile_type.text =[NSString stringWithFormat:@”GIF”];
    }
    else if(RandomIndexnew = 2)
    {
        nameStr =[NSString stringWithFormat:@”jpg”];
        textFieldNormalFile_type.text =[NSString stringWithFormat:@”JPG”];
    }
 
    RandomIndex = arc4random() % 20;
    NSString *nameStr1 =[NSString stringWithFormat:@”Image%i”,RandomIndex];
    textFieldNormalFile_name.text =[NSString stringWithFormat:@”%@.%@”,nameStr1,nameStr];
 
    newFilePath = [NSHomeDirectory() stringByAppendingPathComponent: textFieldNormalFile_name.text];
    imageData = UIImageJPEGRepresentation(img, 1.0);
    if (imageData != nil) {
        NSLog(@”HERE [%@]”, newFilePath);
        [imageData writeToFile:newFilePath atomically:YES];
    }
    image.image =[UIImage imageNamed:newFilePath];
    NSLog(@”newFilePath:%@”,newFilePath);
    path.text =[NSString stringWithFormat:newFilePath];
    NSLog(@”path.text :%@”,path.text);
}

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s