IOS UIImagePickerController

UIImagePickerController

/*
* 分别是图片库,相机,相册
*/
typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
    UIImagePickerControllerSourceTypePhotoLibrary,
    UIImagePickerControllerSourceTypeCamera,
    UIImagePickerControllerSourceTypeSavedPhotosAlbum
};

判断是否支持图片库,相机,相册
 BOOL iscamerasupport = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
    NSLog(@"support camera:%d",iscamerasupport);

/*
* 照相的品质
*/
typedef NS_ENUM(NSInteger, UIImagePickerControllerQualityType) {
    UIImagePickerControllerQualityTypeHigh = 0,       // highest quality
    UIImagePickerControllerQualityTypeMedium = 1,     // medium quality, suitable for transmission via Wi-Fi
    UIImagePickerControllerQualityTypeLow = 2,         // lowest quality, suitable for tranmission via cellular network
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
    UIImagePickerControllerQualityType640x480 = 3,    // VGA quality
#endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0
    UIImagePickerControllerQualityTypeIFrame1280x720 = 4,
    UIImagePickerControllerQualityTypeIFrame960x540 = 5
#endif
};
/*
*相机拍色的类型
*/
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) {
    UIImagePickerControllerCameraCaptureModePhoto,
    UIImagePickerControllerCameraCaptureModeVideo
};
/*
* 前置摄像头与后置摄像头
*/
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
    UIImagePickerControllerCameraDeviceRear,
    UIImagePickerControllerCameraDeviceFront
};
//判断是否支持后置摄像头
BOOL isrearsupport =[UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
    NSLog(@"%d",isrearsupport);


判断后置摄像头是否支持闪光灯

    BOOL isflushsupport =[UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];
    NSLog(@"%d",isflushsupport);
/*
* 闪光灯
*/
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) {
    UIImagePickerControllerCameraFlashModeOff  = -1,
    UIImagePickerControllerCameraFlashModeAuto = 0,
    UIImagePickerControllerCameraFlashModeOn   = 1
};

//拍摄的类型
  NSArray *captureModes =[UIImagePickerController availableCaptureModesForCameraDevice:UIImagePickerControllerCameraDeviceRear];
    for (NSNumber * mode in captureModes) {
        NSLog(@"capture modes:%d",[mode integerValue]);//0,1 分别对应image,movie
    }
    
    NSArray *mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    for (NSString *type in mediaTypes) {

        NSLog(@"media types:%@",type);//为public.image,public.movie

IOS 调用相机示例,说明在代码中有注释:

//
//  LTViewController.m
//  TakePhoto
//
//  Created by admin on 14-8-7.
//  Copyright (c) 2014年 com.longtu. All rights reserved.
//

#import "LTViewController.h"

@interface LTViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>

@end

@implementation LTViewController

@synthesize imageviewphoto;

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

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
-(void)BtnTakePhoto:(id)sender{
    [self CommonFunc];
    [self takephoto:sender];
}
//
-(void)CommonFunc{
    
    
    
    BOOL isCameraSupport = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
    NSLog(@"%d",isCameraSupport);
    
    BOOL isRearSupport =[UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
    NSLog(@"%d",isRearSupport);
    
    BOOL isFlushSupport =[UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];
    NSLog(@"%d",isFlushSupport);
    
    NSArray *captureModes =[UIImagePickerController availableCaptureModesForCameraDevice:UIImagePickerControllerCameraDeviceRear];
    for (NSNumber * mode in captureModes) {
        NSLog(@"capture modes:%d",[mode integerValue]);//0,1 分别对应image,movie
    }
    
    NSArray *mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    for (NSString *type in mediaTypes) {
        NSLog(@"media types:%@",type);//为public.image,public.movie
    }
    
}
//打开相机
-(void)takephoto:(id)sender{
    
    //指定为相机模式,另外也可以是相册或者图片库模式
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
    
    if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){//判断是否支持相机
        sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.sourceType = sourceType;
    picker.delegate = self;
    
    //设置拍照时下面的工具栏是否显示,如果我们是自己定义页面,则需要把工具栏隐藏
    picker.showsCameraControls = YES;
    
    //当拍完照片或者从图库里面选择完以后,是否跳到编辑页面进行编辑
    //只有当showsCameraControls属性为YES时才有效果
    picker.allowsEditing= YES;
    //使用后置摄像头
    picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    //设置闪光灯模式
    picker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
    
    //设置相机支持类型,拍照、录像
    picker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];//设置为相机支持的类型
    picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;//设置为录像
    //picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;//设置为照相
    
    picker.videoQuality = UIImagePickerControllerQualityTypeHigh;//设置录像时的录像质量
    picker.videoMaximumDuration = 30;//设置录像的最大时长
    //设置拍照时屏幕transform属性,可以实现旋转、缩放等
    //备注:所有关于camera的属性必须是sourceType是UIImagePickerControllerSourceTypeCamera时才有效果,否则出现异常
    //picker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI*45/180);//旋转
    //picker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5);//缩放
    
    [self presentViewController:picker animated:YES completion:nil];
    [picker release];
    
}
//打开图片库
-(void)openlocalphoto:(id)sender{
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing= YES;
    picker.sourceType = sourceType;
    [self presentViewController:picker animated:YES completion:nil];
    [picker release];
}

-(void)SaveImage:(UIImage *)image{
    NSLog(@"Save Image Success");
    imageviewphoto.image = image;
}
//打开相机或者本地相册以后的回调函数
/*
 * info key 的说明:
 *      UIImagePickerControllerMediaType:返回NSString,如KUTTypeImage,获取拍摄的类型
 *      UIImagePickerControllerOriginalImage:返回Image,获取图片的原图
 *      UIImagePickerControllerEditedImage:返回Image,获取图片裁剪过以后的图
 *      UIImagePickerControllerCropRect:返回NSValue(CGRect)
 *      UIImagePickerControllerMediaURL:返回NSURL,视频的路径
 *      UIImagePickerControllerReferenceURL:返回NSURL,图片库,或者相册时的原始URL
 *      UIImagePickerControllerMediaMetadata:返回NSDictionary,其中包含所拍图片的metadata,只有在使用摄像头并且是图像类型的时候有效.包含选择图像信息的字典类型
 */
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    [picker dismissViewControllerAnimated:YES completion:nil];
    
    
    NSString *editedimage = [info objectForKey:UIImagePickerControllerEditedImage];
    NSString * type = [info objectForKey:UIImagePickerControllerMediaType];
    UIImage *originalimage =[info objectForKey:UIImagePickerControllerOriginalImage];
    NSValue *val = [info objectForKey:UIImagePickerControllerCropRect];
    NSURL *url =[info objectForKey:UIImagePickerControllerMediaURL];
    NSURL *referenceurl = [info objectForKey:UIImagePickerControllerReferenceURL];
    NSDictionary *dataDic =[info objectForKey:UIImagePickerControllerMediaMetadata];
    
    NSLog(@"type:%@",type);
    NSLog(@"edited image:%@",editedimage);
    NSLog(@"original image:%@",originalimage);
    NSLog(@"CropRect :%@",val);
    NSLog(@"media url :%@",url);
    NSLog(@"reference url:%@",referenceurl);
    NSLog(@"dataDic :%@",dataDic);
    
    UIImage *image = [[info objectForKey:UIImagePickerControllerEditedImage] retain];
    NSData *data;
    if([type isEqualToString:@"public.image"]){//保存为图片
        if(UIImagePNGRepresentation(image)==nil){
            data = UIImageJPEGRepresentation(image,1.0);
        }else{
            data =UIImagePNGRepresentation(image);
        }
    
        NSString * photostorepath = [NSHomeDirectory() stringByAppendingPathComponent:@"picture"];
    
        NSFileManager *filemanager = [NSFileManager defaultManager];
    
        [filemanager createDirectoryAtPath:photostorepath withIntermediateDirectories:YES attributes:nil error:nil];
        
    
        NSString * filepath =[NSString stringWithFormat:@"%@%@",photostorepath,@"/abc.png"];
    
        [filemanager createFileAtPath:filepath contents:data attributes:nil];
        NSLog(@"image path:%@",filepath);
    }else{//保存视频
        
        //保存视频到Document目录
        NSFileManager *filemanager = [NSFileManager defaultManager];
        NSArray *patharray =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString * moviestorepath = [[patharray objectAtIndex:0] stringByAppendingPathComponent:@"movie"];
        [filemanager createDirectoryAtPath:moviestorepath withIntermediateDirectories:YES attributes:nil error:nil];
        NSString *moviepath =[NSString stringWithFormat:@"%@%@",moviestorepath,@"/abc.MOV"];
        NSData * movie = [filemanager contentsAtPath:[url path]];

        [filemanager createFileAtPath:moviepath contents:movie attributes:nil];
        NSLog(@"movie path:%@",moviepath);
        
        
        //UISaveVideoAtPathToSavedPhotosAlbum([url path], self, @selector(video:didFinishSavingWithError:contextInfo:), nil);//保存视频到图片库
        
    }

    [self performSelector:@selector(SaveImage:) withObject:image afterDelay:0.0];
    
}
-(void)video:(NSString *)videopath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contentInfo{
    NSLog(@"%@",videopath);
    NSLog(@"%@",error);
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    NSLog(@"Cancel");
    [picker dismissViewControllerAnimated:YES completion:nil];
}
-(BOOL)shouldAutorotate:(UIInterfaceOrientation)interfaceOrientation{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

代码下载:http://download.csdn.net/detail/u011872945/7739381

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值