`

UIImagePickerController 拍照与摄像

    博客分类:
  • ios
阅读更多

UIImagePickerController拍照与摄像

 

   
该类继承自UINavigationController类
步骤:

 

检查媒体来源模式是否可用

 

检查该来源模式下所支持的媒体类型

 

创建图像选取控制器,设置其属性并显示

 

在委托协议方法中处理

 

 

 

1.检查媒体来源

 

调用UIImagePickerController类的静态方法isSourceTypeAvailable来检查

 

sourceType是一个UIImagePickerControllerSourceType类型的枚举值,它表示图像选取控制器的3种不同的媒体来源模式

 

UIImagePickerControllerSourceTypePhotoLibrary:照片库模式。图像选取控制器以该模式显示时会浏览系统照片库的根目录。

 

UIImagePickerControllerSourceTypeCamera:相机模式,图像选取控制器以该模式显示时可以进行拍照或摄像。

 

UIImagePickerControllerSourceTypeSavedPhotosAlbum:相机胶卷模式,图像选取控制器以该模式显示时会浏览相机胶卷目录。

 

如果设备支持指定的媒体来源模式,则isSourceTypeAvailable:方法返回YES,否则返回NO。

 

2.检查支持的媒体类型

 

调用UIImagePickerController类的另一个静态方法 availableMediaTypesForSourceType:

 

返回的是字符串数组,kUTTypeImage表示静态图片,kUTTypeMovie表示视频。这两个字符串常量定义在MobileCoreServices框架中。

 

 

 

参数info是一个字典,包含媒体类型,拍照的原始图片,编辑后的图片,或是摄像的视频文件的URL等。

 

//

//  ViewController.h

//  Camera

//

//  Created by gao wuhang on 12-11-23.

//  Copyright (c) 2012 gao wuhang. All rights reserved.

//

 

#import

 

@interface ViewController : UIViewController<</span>UINavigationControllerDelegate, UIImagePickerControllerDelegate>

 

- (IBAction)takePictureButtonClick:(id)sender;

- (IBAction)captureVideoButtonClick:(id)sender;

 

@end

 

//

//  ViewController.m

//  Camera

//

//  Created by gao wuhang on 12-11-23.

//  Copyright (c) 2012 gao wuhang. All rights reserved.

//

 

#import "ViewController.h"

#import

#import

 

@interface ViewController ()

 

@end

 

@implementation ViewController

 

 

- (IBAction)takePictureButtonClick:(id)sender{

    //检查相机模式是否可用

    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        NSLog(@"sorry, no camera or camera is unavailable.");

       return;

    }

    //获得相机模式下支持的媒体类型

    NSArray* availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

   BOOL canTakePicture = NO;

   for (NSString* mediaType in availableMediaTypes) {

       if ([mediaType isEqualToString:(NSString*)kUTTypeImage]) {

           //支持拍照

            canTakePicture = YES;

           break;

        }

    }

    //检查是否支持拍照

   if (!canTakePicture) {

        NSLog(@"sorry, taking picture is not supported.");

       return;

    }

    //创建图像选取控制器

    UIImagePickerController* imagePickerController = [[UIImagePickerController alloc] init];

    //设置图像选取控制器的来源模式为相机模式

    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

    //设置图像选取控制器的类型为静态图像

    imagePickerController.mediaTypes = [[[NSArray alloc] initWithObjects:(NSString*)kUTTypeImage, nil] autorelease];

    //允许用户进行编辑

    imagePickerController.allowsEditing = YES;

    //设置委托对象

    imagePickerController.delegate = self;

    //以模视图控制器的形式显示

    [self presentModalViewController:imagePickerController animated:YES];

    [imagePickerController release];

}

 

- (IBAction)captureVideoButtonClick:(id)sender{

    //检查相机模式是否可用

    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        NSLog(@"sorry, no camera or camera is unavailable!!!");

       return;

    }

    //获得相机模式下支持的媒体类型

    NSArray* availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

   BOOL canTakeVideo = NO;

   for (NSString* mediaType in availableMediaTypes) {

       if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {

           //支持摄像

            canTakeVideo = YES;

           break;

        }

    }

    //检查是否支持摄像

   if (!canTakeVideo) {

        NSLog(@"sorry, capturing video is not supported.!!!");

       return;

    }

    //创建图像选取控制器

    UIImagePickerController* imagePickerController = [[UIImagePickerController alloc] init];

    //设置图像选取控制器的来源模式为相机模式

    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

    //设置图像选取控制器的类型为动态图像

    imagePickerController.mediaTypes = [[[NSArray alloc] initWithObjects:(NSString*)kUTTypeMovie, nil] autorelease];

    //设置摄像图像品质

    imagePickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;

    //设置最长摄像时间

    imagePickerController.videoMaximumDuration = 30;

    //允许用户进行编辑

    imagePickerController.allowsEditing = YES;

    //设置委托对象

    imagePickerController.delegate = self;

    //以模式视图控制器的形式显示

    [self presentModalViewController:imagePickerController animated:YES];

    [imagePickerController release];

    

}

 

- (void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo{

   if (!error) {

        NSLog(@"picture saved with no error.");

    }

   else

    {

        NSLog(@"error occured while saving the picture%@", error);

    }

}

 

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

    //打印出字典中的内容

    NSLog(@"get the media info: %@", info);

    //获取媒体类型

    NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType];

    //判断是静态图像还是视频

   if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {

        //获取用户编辑之后的图像

    UIImage* editedImage = [info objectForKey:UIImagePickerControllerEditedImage];

        //将该图像保存到媒体库中

                               UIImageWriteToSavedPhotosAlbum(editedImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);

    }else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])

                                {

                                   //获取视频文件的url

                                   NSURL* mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];

                                   //创建ALAssetsLibrary对象并将视频保存到媒体库

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

                                    [assetsLibrary writeVideoAtPathToSavedPhotosAlbum:mediaURL completionBlock:^(NSURL *assetURL, NSError *error) {

                                       if (!error) {

                                           NSLog(@"captured video saved with no error.");

                                        }else

                                        {

                                           NSLog(@"error occured while saving the video:%@", error);

                                        }

                                    }];

                                    [assetsLibrary release];

                                }

                                [picker dismissModalViewControllerAnimated:YES];

    

}

 

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

    [picker dismissModalViewControllerAnimated:YES];

}

                                

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

 

- (void)viewDidUnload

{

    [super viewDidUnload];

    // Release any retained subviews of the main view.

}

 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}

 

@end

分享到:
评论

相关推荐

    UIImagePickerController拍照与摄像

    UIImagePickerController是iOS平台上用于集成到应用中的一个核心组件,它允许用户通过拍照或从相册选择图片和视频。这个组件是苹果提供的UI框架的一部分,特别设计用于处理媒体输入,特别是对于那些需要用户交互来...

    IOS UIImagePickerController从拍照、图库、相册获取图片

    IOS UIImagePickerController从拍照、图库、相册获取图片 iOS 获取图片有三种方法: 1. 直接调用摄像头拍照 2. 从相册中选择 3. 从图库中选择 UIImagePickerController 是系统提供的用来获取图片和视频的接口; 用...

    iOS 照相机与摄像机的使用

    在iOS平台上,照相机与摄像机的使用是移动应用开发中的关键部分,特别是在构建与媒体交互的应用时。本文将深入探讨如何在iOS中利用这些功能,主要基于标题和描述提供的信息,我们将关注以下核心知识点: 1. **...

    ios开发拍照摄像并保存到相册

    在iOS开发中,集成拍照和摄像功能是常见的需求,用户可以通过这些功能拍摄照片或录制视频,然后将其保存到设备的相册中。本教程将详细讲解如何实现这一过程,主要涉及的知识点包括: 1. **AVFoundation框架**:在...

    iOS 相册、摄像小demo

    这个“iOS 相册、摄像小demo”是一个典型的例子,它展示了如何使用苹果提供的UIKit框架中的UIImagePickerController来实现从系统相册选择图片或直接拍摄的功能。接下来,我们将深入探讨这个demo所涉及的核心知识点。...

    iOS 6 Programming Cookbook第13章_照相机和图片库

    - **UIImagePickerController**:与拍照类似,设置`UIImagePickerController`的`sourceType`属性为`UIImagePickerControllerSourceTypeCamera`,并通过`videoQuality`属性调整视频质量。 - **AVFoundation**:使用`...

    iOS自定义照相机并访问相册

    在iOS开发中,自定义相机和访问相册是常见的需求,尤其在开发摄影类或社交类应用时。本文将深入探讨如何使用Swift语言实现这一功能,主要涉及的知识点包括: 1. **AVFoundation框架**:iOS中用于处理音频和视频的主...

    Unity3d调用IOS相册,对照片进行剪裁

    在Unity3D开发中,有时候我们需要与iOS原生系统进行交互,例如访问用户的照片库,进行图片选择和编辑。这个场景通常涉及到Unity的插件开发和iOS的原生API调用。下面将详细讲解如何在Unity3D 2018.3.0版本中实现调用...

    iOS开发中对于摄像头的一些基本使用方法分享

    UIImagePickerController 这个类可以为大家提供照相的功能,以及图片,视频浏览的功能。 检查硬件是否安装有摄像头或者允许操作相册 代码如下: #pragma mark – 摄像头和相册相关的公共类 // 判断设备是否有摄像头 ...

    deegeu-swift-camera-basic:如何在iOS中使用Swift使用相机拍照

    如何使用Swift 2.0访问iOS相机该存储库的目的是用代码补充视频,并提供使用UIImagePickerController在iOS设备上拍照的简单起点。 “如何使用Swift 2.0访问iOS摄像机”视频演示了如何使用Swift 2.0拍摄iPhone / iPad...

    iOS照片选择及图像处理

    在iOS开发中,图片的选择与处理是不可或缺的功能,尤其在社交、电商、摄影类应用中。本项目封装的工具库正是针对这一需求,提供了一套完整的解决方案,包括照片的多选单选、裁剪、涂抹以及拍照和图片浏览等功能。...

    斯坦福 iOS7应用开发 shutterbug

    在Shutterbug中,你会学习如何使用UIImagePickerController来集成系统相机,让用户能够直接在应用内拍照。同时,还要了解如何使用UIImageView显示所拍的照片,并实现滑动浏览功能。 接下来,课程会介绍Core Image...

    ios 用摄像头捕捉的图像为背景

    使用`UIImagePickerController`可以轻松地提供标准的拍照和从相册选择的界面,但如果你需要自定义界面,可以手动配置`AVCaptureSession`。 6. **权限管理**: 自iOS8开始,应用程序需要获取用户授权才能访问摄像头...

Global site tag (gtag.js) - Google Analytics