/*
* 分别是图片库,相机,相册
*/
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