iOS开发选取系统相册
来源:互联网 发布:哪个股票软件好用 知乎 编辑:程序博客网 时间:2024/05/19 02:01
在一些应用中,我们需要用到iOS设备的摄像头进行拍照,视频。并且从相册中选取我们需要的图片或者视频。
关于iOS摄像头和相册的应用,可以使用UIImagePickerController类来完成控制。
关于UIImagePickerController的相关知识,
如下:
iOS的一些设备上都安装了摄像头。现在绝大多数都有了。在编程中,我们是用相应的东西来进行照相,录像等功能。一、UIImagePickerController类UIImagePickerController
这个类可以为大家提供照相的功能,以及图片,视频浏览的功能。 二、检查硬件是否安装有摄像头或者允许操作相册这些公共的方法,我们也许会用到,我就贴了!So easy!!!#pragma mark -
摄像头和相册相关的公共类
//
判断设备是否有摄像头 - (BOOL) isCameraAvailable{
return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerS ourceTypeCamera]; }
//
前面的摄像头是否可用 - (BOOL) isFrontCameraAvailable{
return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerC ameraDeviceFront]; }
//
后面的摄像头是否可用 - (BOOL) isRearCameraAvailable{
return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerC ameraDeviceRear]; }
//
判断是否支持某种多媒体类型:拍照,视频 - (BOOL) cameraSupportsMedia:(NSString
*)paramMediaType sourceType:(UIImagePickerControllerS ourceType )paramSourceType{
__block BOOL result = NO;
if ([paramMediaType length] == 0){
NSLog(@"Media type is empty.");
return NO;
}
NSArray *availableMediaTypes =[UIImagePickerControlleravailableMediaTypesForSo urceType :paramSourceType];
[availableMediaTypes enumerateObjectsUsingBlo ck :^(idobj, NSUInteger idx, BOOL*stop) {
NSString *mediaType = (NSString *)obj;
if ([mediaTypeisEqualToString:paramMediaType]){
result = YES;
*stop= YES;
}
}];
return result; }
//
检查摄像头是否支持录像 - (BOOL) doesCameraSupportShootin
gVideos{
return [self cameraSupportsMedia:( NSString *)kUTTypeMoviesourceType:UIImagePickerControllerS ourceTypeCamera]; }
//
检查摄像头是否支持拍照 - (BOOL) doesCameraSupportTakingP
hotos{
return [self cameraSupportsMedia:( NSString *)kUTTypeImagesourceType:UIImagePickerControllerS ourceTypeCamera]; }
#pragma mark - 相册文件选取相关
// 相册是否可用
- (BOOL) isPhotoLibraryAvailable{
return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerS ourceTypePhotoLibrary]; }
// 是否可以在相册中选择视频
- (BOOL) canUserPickVideosFromPho
toLibrary{
return [selfcameraSupportsMedia:(NSString *)kUTTypeMovie sourceType:UIImagePickerControllerS ourceTypePhotoLibrary]; }
// 是否可以在相册中选择视频
- (BOOL) canUserPickPhotosFromPho
toLibrary{
return [selfcameraSupportsMedia:(NSString *)kUTTypeImage sourceType:UIImagePickerControllerS ourceTypePhotoLibrary]; }
三、用摄像头进行拍照和录像功能1.我们将UIImagePickerController功能写在一个按钮的点击事件中:
#pragma mark - 拍照按钮事件
- (void)ClickControlAction:(id)sender{
// 判断有摄像头,并且支持拍照功能
if ([self isCameraAvailable] && [self doesCameraSupportTakingP hotos]){
//初始化图片选择控制器
UIImagePickerController*controller = [[UIImagePickerController alloc] init];
setSourceType:UIImagePickerControllerS [controller ourceTypeCamera];//设置类型
// 设置所支持的类型,设置只能拍照,或则只能录像,或者两者都可以
NSString *requiredMediaType = ( NSString *)kUTTypeImage;
NSString *requiredMediaType1 = ( NSString *)kUTTypeMovie;
NSArray *arrMediaTypes=[NSArrayarrayWithObjects:requiredMediaType, requiredMediaType1,nil];
[controller setMediaTypes:arrMediaTypes];
//设置录制视频的质量
setVideoQuality:UIImagePickerControllerQ [controller ualityTypeHigh];
//设置最长摄像时间
[controller setVideoMaximumDuration:10.f];
[controller setAllowsEditing:YES];//设置是否可以管理已经存在的图片或者视频
[controller setDelegate:self];//设置代理
self.navigationController presentModalViewControll [ er:controller animated:YES];
[controller release];
} else {
NSLog(@"Camera is not available.");
} }
解释:2.setSourceType 方法通过设置setSourceType方法可以确定调用出来的UIImagePickerController所显示出来的界面typedef
NS_ENUM(NSInteger, UIImagePickerControllerS ourceType) {
UIImagePickerControllerS ourceTypePhotoLibrary,
UIImagePickerControllerS ourceTypeCamera,
UIImagePickerControllerS ourceTypeSavedPhotosAlbu m };
分别表示:图片列表,摄像头,相机相册3.setMediaTypes方法//
设置所支持的类型,设置只能拍照,或则只能录像,或者两者都可以
NSString *requiredMediaType = ( NSString *)kUTTypeImage;
NSString *requiredMediaType1 = ( NSString *)kUTTypeMovie;
NSArray *arrMediaTypes=[NSArray arrayWithObjects:requiredMediaType, requiredMediaType1,nil];
[controller setMediaTypes:arrMediaTypes];
4.关于UIImagePickerControllerDelegate 协议
我们要对我们拍摄的照片和视频进行存储,那么就要实现UIImagePickerControllerDelegate 协议的方法。
#pragma mark - UIImagePickerControllerD
elegate 代理方法
// 保存图片后到相册后,调用的相关方法,查看是否保存成功
- (void) imageWasSavedSuccessfull
y:(UIImage *)paramImage didFinishSavingWithError :(NSError *)paramError contextInfo:(void *)paramContextInfo{
if (paramError == nil){
NSLog(@"Image was saved successfully.");
} else {
NSLog(@"An error happened while saving the image.");
NSLog(@"Error = %@", paramError);
} }
// 当得到照片或者视频后,调用该方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWit
hInfo:(NSDictionary *)info{
NSLog(@"Picker returned successfully.");
NSLog(@"%@", info);
NSString *mediaType = [info objectForKey:UIImagePickerControllerM ediaType];
// 判断获取类型:图片
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]){
UIImage *theImage = nil;
// 判断,图片是否允许修改
if ([picker allowsEditing]){
//获取用户编辑之后的图像
objectForKey:UIImagePickerControllerE theImage = [info ditedImage];
}else {
// 照片的元数据参数
objectForKey:UIImagePickerControllerO theImage = [info riginalImage];
}
// 保存图片到相册中
SEL selectorToCall = @selector(imageWasSavedSuccessfull y:didFinishSavingWithError :contextInfo:);
UIImageWriteToSavedPhoto sAlbum (theImage,self,selectorToCall, NULL);
}elseif ([mediaType isEqualToString:(NSString *)kUTTypeMovie]){
// 判断获取类型:视频
//获取视频文件的url
NSURL* mediaURL = [infoobjectForKey:UIImagePickerControllerM ediaURL];
//创建ALAssetsLibrary对象并将视频保存到媒体库
// Assets Library 框架包是提供了在应用程序中操作图片和视频的相关功能。相当于一个桥梁,链接了应用程序和多媒体文件。
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibraryalloc] init];
// 将视频保存到相册中
writeVideoAtPathToSavedP [assetsLibrary hotosAlbum:mediaURL
completionBlock:^(NSURL *assetURL,NSError *error) {
if (!error) {
NSLog(@"captured video saved with no error.");
}else{
NSLog(@"error occured while saving the video:%@", error);
}
}];
[assetsLibraryrelease];
}
dismissModalViewControll [picker erAnimated:YES]; }
// 当用户取消时,调用该方法
- (void)imagePickerControllerDid
Cancel:(UIImagePickerController *)picker{
dismissModalViewControll [picker erAnimated:YES]; }
四、从相册获取图片和视频数据
1.我们将功能封装在一个按钮的点击事件中
#pragma mark - 相册操作
- (void)ClickShowPhotoAction:(id)sender{
if ([self isPhotoLibraryAvailable]){
UIImagePickerController*controller = [[UIImagePickerController alloc] init];
setSourceType:UIImagePickerControllerS [controller ourceTypePhotoLibrary];//设置类型
NSMutableArray *mediaTypes = [[NSMutableArrayalloc] init];
if ([self canUserPickPhotosFromPho toLibrary]){
[mediaTypesaddObject:( NSString *)kUTTypeImage];
}
if ([self canUserPickVideosFromPho toLibrary]){
[mediaTypesaddObject:( NSString *)kUTTypeMovie];
}
[controllersetMediaTypes:mediaTypes];
[controllersetDelegate:self];//设置代理
self.navigationController presentModalViewControll [ er:controller animated:YES];
[controllerrelease];
[mediaTypesrelease];
}
}
2.关于UIImagePickerControllerDelegate 协议,我们可以重用。
在这里,就不用赘述了!
最后,需要说的是,UIImagePickerControllerDelegate 协议中
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWit
hInfo:(NSDictionary *)info方法,中的info值,会根据我们操作的类型不同,而产生了不同的数据信息:
当操作的为图片时::
{
UIImagePickerControllerC ropRect = "NSRect: {{0, 405}, {2448, 2449}}";
UIImagePickerControllerE ditedImage = "";
UIImagePickerControllerM ediaMetadata = {
DPIHeight = 72;
DPIWidth = 72;
Orientation = 6;
"{Exif}" = {
ApertureValue = "2.526068811667588";
BrightnessValue = "-0.0709875088566263";
ColorSpace = 1;
DateTimeDigitized = "2013:04:05 16:43:00";
DateTimeOriginal = "2013:04:05 16:43:00";
ExposureMode = 0;
ExposureProgram = 2;
ExposureTime = "0.05882352941176471";
FNumber = "2.4";
Flash = 24;
FocalLenIn35mmFilm = 35;
FocalLength = "4.28";
ISOSpeedRatings = (
400
);
MeteringMode = 5;
PixelXDimension = 3264;
PixelYDimension = 2448;
SceneType = 1;
SensingMethod = 2;
Sharpness = 0;
ShutterSpeedValue = "4.099543917546131";
SubjectArea = (
1631,
1223,
881,
881
);
WhiteBalance = 0;
};
"{TIFF}" = {
DateTime = "2013:04:05 16:43:00";
Make = Apple;
Model = "iPhone 4S";
Software = "5.1.1";
XResolution = 72;
YResolution = 72;
};
};
UIImagePickerControllerM ediaType = "public.image";
UIImagePickerControllerO riginalImage = ""; }
当我们操作的为视频时:
{
UIImagePickerControllerM ediaType = "public.movie";
UIImagePickerControllerM ediaURL = "file://localhost/private/var/mobile/Applications/22A14825-DD7E-48E1-A1D5-2D85B82095B5/tmp/capture-T0x1363a0.tmp.etXfD4/capturedvideo.MOV"; }
希望对你有所帮助!
- iOS开发选取系统相册
- iOS开发系统相册的选取
- IOS 系统相册 选取多张
- iOS调用系统相册选取图片
- iOS选取相册图片
- iOS从系统相册选取多张照片
- iOS开发获取系统相册资源,自定义相册(PhotoKit)
- ios开发调用系统相机相册
- iOS开发 调用系统相机和相册
- iOS开发——系统相册操作
- iOS开发之获取系统相册ALAssetLibrary
- ios开发 使用系统相册和相机
- ios:从系统相册选取视频并获得视频的缩略图
- ios:从系统相册选取视频并获得视频的缩略图
- ios:从系统相册选取视频并获得视频的缩略图
- iOS判断从系统相册选取的是视频还是照片
- iOS 之摄像头/相册选取图片
- iOS 头像选取 (相机或相册)
- JUnit---(断言和注解)
- 在本地发布网站
- awk 格式化输出
- 2016年上半年公开课一览!
- 第八周——php的变量和方法
- iOS开发选取系统相册
- ios GPUImageGaussianBlurFilter 苹果模糊效果
- Java网络socket编程详解
- sftp及两种连接模式简介
- 快速排序以及二分查找的实现
- 如何获取SharePoint 2013 Build Numbers?
- 已有新建短信的情况下。文件管理中,使用短信分享图片,图片没有被添加进短信
- J2EE工具篇-firebug和myeclipse database explorer
- cocos2d-x之定时器后台刷新