取本地相册,保存到项目

来源:互联网 发布:sql组合主键 编辑:程序博客网 时间:2024/06/11 14:12

1.引用系统类库MediaPlayer.framework和MobileCoreServices.framework

   代码中绰用:


#import<MediaPlayer/MediaPlayer.h> 和

#import<MediaPlayer/MediaPlayer.h>

头文件如下:

#import<UIKit/UIKit.h>

#import<MediaPlayer/MediaPlayer.h>


@interface ViewController :UIViewController

<UIImagePickerControllerDelegate>{

    UIPopoverController *popoverController;

}


@property (strong,nonatomic)IBOutletUIImageView *imageView;

@property (strong,nonatomic)IBOutletUIButton *takePictureButton;

@property (strong,nonatomic)MPMoviePlayerController *moviePlayerController;

@property (strong,nonatomic)UIImage *image;

@property (strong,nonatomic)NSURL *movieURL;

@property (copy,nonatomic)NSString *lastChosenMediaType;

@property (assign,nonatomic)CGRect imageFrame;


-(IBAction)SaveImage:(id)sender;

- (IBAction)shootPictureOrVideo:(id)sender;

- (IBAction)selectExistingPictureOrVideo:(id)sender;

@end


2.取本地相册(IPAD要承载UIPopoverController来显示)

- (void)getMediaFromSource:(UIImagePickerControllerSourceType)sourceType {

   NSArray *mediaTypes = [UIImagePickerController

                          availableMediaTypesForSourceType:sourceType];

   if ([UIImagePickerControllerisSourceTypeAvailable:

         sourceType] && [mediaTypescount] >0) {

       NSArray *mediaTypes = [UIImagePickerController

                              availableMediaTypesForSourceType:sourceType];

       UIImagePickerController *picker =

        [[UIImagePickerControlleralloc]init];

        picker.mediaTypes = mediaTypes;

        picker.delegate =self;

        picker.allowsEditing =NO;//如果为YES则表示可编辑选取图片

        picker.sourceType = sourceType;

        

       UIPopoverController *popover = [[UIPopoverControlleralloc]initWithContentViewController:picker];

        popoverController = [popover retain];

        

        [popoverControllerpresentPopoverFromRect:CGRectMake(0,0,500,300)inView:self.viewpermittedArrowDirections:UIPopoverArrowDirectionAnyanimated:YES];

        

        [popover release];

        [picker release];

        

    } else {

        UIAlertView *alert = [[UIAlertView alloc]

                             initWithTitle:@"Error accessing media"

                             message:@"Device doesn’t support that media source."

                             delegate:nil

                             cancelButtonTitle:@"Drat!"

                             otherButtonTitles:nil];

        [alert show];

    }

}

--调用

[selfgetMediaFromSource:UIImagePickerControllerSourceTypePhotoLibrary];

3.选择图片(或选择编辑后图片),调用

#pragma mark UIImagePickerController delegate methods

- (void)imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary *)info {

   self.lastChosenMediaType = [infoobjectForKey:UIImagePickerControllerMediaType];

   NSLog(@"%@",[infoobjectForKey:UIImagePickerControllerReferenceURL]);

   if ([lastChosenMediaTypeisEqual:(NSString *)kUTTypeImage]) {

       UIImage *chosenImage = [infoobjectForKey:UIImagePickerControllerOriginalImage];

        UIImage *shrunkenImage = shrinkImage(chosenImage,imageFrame.size);

        self.image = shrunkenImage;

    } else if ([lastChosenMediaTypeisEqual:(NSString *)kUTTypeMovie]) {

       self.movieURL = [infoobjectForKey:UIImagePickerControllerMediaURL];

    }

    [popoverControllerdismissPopoverAnimated:YES];

}


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 

    [popoverControllerdismissPopoverAnimated:YES];

}


#pragma mark  --将图片放大、缩小到指定大小(当)

staticUIImage *shrinkImage(UIImage *original,CGSize size) {

   CGFloat scale = [UIScreenmainScreen].scale;

   CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();

    

    CGContextRef context = CGBitmapContextCreate(NULL, size.width * scale,

                                                 size.height * scale,8,0, colorSpace,kCGImageAlphaPremultipliedFirst);

   CGContextDrawImage(context,

                      CGRectMake(0,0, size.width * scale, size.height * scale),

                       original.CGImage);

    CGImageRef shrunken = CGBitmapContextCreateImage(context);

    UIImage *final = [UIImage imageWithCGImage:shrunken];

    

   CGContextRelease(context);

    CGImageRelease(shrunken);

    

    return final;

}

4.保存图片到项目沙盒目录

-(void)SaveImage:(id)sender{

    NSData *imageData = nil;

    imageData=UIImagePNGRepresentation(self.image);

    int value=arc4random();

     NSDateFormatter *formatter = [[NSDateFormatteralloc]init]; [formattersetDateFormat:@"yyyyMMddHHmmss"];

    NSString *locationString=[formatter stringFromDate: [NSDatedate]];

    NSLog(@"%@",locationString);

    [formatter release];

    [imageDatawriteToFile:[NSStringstringWithFormat:@"%@/%d.jpg",[selfdataFilePath],value]atomically:YES];

}

//取得沙盒目录

-(NSString *)dataFilePath {

    

   NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

    

    NSString *documentsDirectory = [paths objectAtIndex:0];

    

    NSLog(@"%@",documentsDirectory);

    

    return documentsDirectory;

    

}

//显示图片或视频到当前视图

- (void)updateDisplay {

   if ([lastChosenMediaTypeisEqual:(NSString *)kUTTypeImage]) {

       imageView.image =image;

       //imageView.hidden = NO;

       //moviePlayerController.view.hidden = YES;

    } else if ([lastChosenMediaTypeisEqual:(NSString *)kUTTypeMovie]) {

        [self.moviePlayerController.viewremoveFromSuperview];

       self.moviePlayerController = [[MPMoviePlayerControlleralloc]

                                     initWithContentURL:movieURL];

       moviePlayerController.view.frame =imageFrame;

       moviePlayerController.view.clipsToBounds =YES;

        [self.viewaddSubview:moviePlayerController.view];

        imageView.hidden = YES;

    }

}

//判断是否连接摄像头

if (![UIImagePickerControllerisSourceTypeAvailable:

         UIImagePickerControllerSourceTypeCamera]) {

       takePictureButton.hidden =YES;//不存在摄像头

    }


原创粉丝点击