如何在iOS中捕获Image Path?

时间:2014-01-02 14:51:37

标签: ios objective-c path uiimageview camera

我正在尝试使用iphone捕获图像并将其保存在相册中。我可以在那里看到我的图像但是无法获得图像的确切路径? 这是我正在使用的代码。

#import "captureViewController.h"
#import <QuartzCore/QuartzCore.h>
@interface captureViewController ()
{
    UIImageView *imageview;
    NSString *str;
    UIImagePickerController *picker;
}
@property (strong, nonatomic) IBOutlet UIImageView *imageview;
@end

@implementation captureViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)captureButton:(id)sender {
   picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:picker animated:YES completion:NULL];
}

- (IBAction)selectButton:(id)sender {
}

- (IBAction)selectPhotos
{
   picker = [[UIImagePickerController alloc] init];
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.delegate = self;
    [self presentModalViewController:picker animated:YES];
   // [picker release];
}

- (void)imagePickerController:(UIImagePickerController *)picker
        didFinishPickingImage:(UIImage *)image
                  editingInfo:(NSDictionary *)editingInfo
{
    imageview.image = image;
    [[picker parentViewController] dismissModalViewControllerAnimated:YES];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker
{
    [picker dismissModalViewControllerAnimated:YES];
   }

- (void)pickerDone:(id)sender
{
    [picker dismissModalViewControllerAnimated:YES];

    }


- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
        if (error) {
            NSLog(@"error");
        } else {
            NSLog(@"url %@", assetURL);
            [self getimage:assetURL];
        }

    }];

     [picker dismissModalViewControllerAnimated:YES];

}
-(void)getimage:(NSURL *)url{
   ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
    ALAssetRepresentation *rep = [myasset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    if (iref) {
        UIImage *largeimage = [UIImage imageWithCGImage:iref];
        // update image
        imageview.image = largeimage;
    } else {
        NSLog(@"Error in resultblock in PhotoAlbumViewController!");
    }
};

// failure block
ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
{
    NSLog(@"Can't get image - %@",[myerror localizedDescription]);
};

ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
str=[NSString stringWithFormat:@"%@",url];
[assetslibrary assetForURL:url
               resultBlock:resultblock
              failureBlock:failureblock];
}

这里使用的是ALAssetsLibrary,但我得到的路径如下格式

 assets-library://asset/asset.JPG?id=6BD5603D-BB7D-46E3-84A3-43BB33C735BF&ext=JPG

我试图在同一页面的一个UIImageView中加载这个图像,所以当我给这个路径图像没有加载(检查getImage()

图片附加邮件代码

    - (IBAction)selectButton:(id)sender
{

    if ([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];

        mailer.mailComposeDelegate = self;

        [mailer setSubject:@"eGift"];

        NSArray *toRecipients = [NSArray arrayWithObjects:@"", nil];
        [mailer setToRecipients:toRecipients];
        NSLog(@"%@",str);//Is the asset url
        UIImage *myImage = [UIImage imageWithContentsOfFile:str];
        NSData *imageData = UIImagePNGRepresentation(myImage);
        [mailer addAttachmentData:imageData mimeType:@"image/png" fileName:str];

        NSString *emailBody = @"Please check the attached image: Naveen";
        [mailer setMessageBody:emailBody isHTML:NO];

        // only for iPad
        // mailer.modalPresentationStyle = UIModalPresentationPageSheet;

        [self presentModalViewController:mailer animated:YES];

        //[mailer release];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Failure"
                                                        message:@"Your device doesn't support the composer sheet"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles: nil];
        [alert show];
        // [alert release];
    }

}



#pragma mark - MFMailComposeController delegate


- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    switch (result)
    {
        case MFMailComposeResultCancelled:
            NSLog(@"Mail cancelled: you cancelled the operation and no email message was queued");
            break;
        case MFMailComposeResultSaved:
            NSLog(@"Mail saved: you saved the email message in the Drafts folder");
            break;
        case MFMailComposeResultSent:
            NSLog(@"Mail send: the email message is queued in the outbox. It is ready to send the next time the user connects to email");
            break;
        case MFMailComposeResultFailed:
            NSLog(@"Mail failed: the email message was nog saved or queued, possibly due to an error");
            break;
        default:
            NSLog(@"Mail not sent");
            break;
    }

    [self dismissModalViewControllerAnimated:YES];
}

1 个答案:

答案 0 :(得分:1)

这是通过ALAssetsLibrary正确加载图像的方式:

/* load photo from directory */

// result block
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
    ALAssetRepresentation *rep = [myasset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    if (iref) {
        UIImage *largeimage = [UIImage imageWithCGImage:iref];
        // update image
        imageview.image = largeimage;
    } else {
        NSLog(@"Error in resultblock in PhotoAlbumViewController!");
    }
};

// failure block
ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
{
    NSLog(@"Can't get image - %@",[myerror localizedDescription]);
};

ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];

[assetslibrary assetForURL:url
               resultBlock:resultblock
              failureBlock:failureblock];