iOS--图像加载UIImagePickerController

一、图像加载

iOS图像加载通常有四种方式

1、相册

用户的相册资源,UIImagePickerController读取

2、应用程序包

与应用程序源文件同一目录,可通过文件路径读取

//图像路径

NSString *path = [[NSBundle mainBundle] stringByAppendingPathComponent:@"icon.png"];

//通过路径对应的图片文件

UIImage *image = [UIImage imageWithContentsOfFile:path];

3、沙盒

沙盒目录既可以保存图片,也可以通过路径读取

//沙盒下的Documents目录

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/icon.png"];

//通过路径对应的图片文件

UIImage *image = [UIImage imageWithContentsOfFile:path];

4、因特网

1)通过URL从网络上下载图像读取

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/img/520.jpeg"];

2)NSData提供了简单的网络数据加载

NSData *data = [NSData dataWithContentsOfURL:url];

3)NSData转UIImage

//网络获取数据

NSData *data = [NSData dataWithContentsOfURL:url];

//将NSData转成UIImage

UIImage *image = [UIImage imageWithData:data];

4)UIImage转NSData

//compressionQuality图像的范围为0.0(最低品质)到1.0(最高品质)的压缩系数

NSData *data = UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);

PS: 将UIImage对象转话为NSData对象的两种方式

1、UIImageJPEGRepresentation(UIImage *image,0.5)

最终得到的data对象数据量少,而且可以通过设置图片质量进一步的减少数据量,虽然清晰度不如第二种方式,但对于大众用户来说区别不大

2、UIImagePNGRepresentation

最终得到的data队形数据量大

二、将图片保存到手机相册

1、开始保存

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

2、保存结束以后调用该方法

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

NSLog(@"%@",error);//如果为null表示已经保存到相册中

}

三、UIImagePickerController的基本介绍

1、相册资源访问通过UIImagePickerController来访问

2、UIImagePickerController类继承自UINavigationController,是个独立的导航控制器,使用模态窗口的方式弹出。

四、UIImagePickerController的常用属性和方法

1、拾取源类型,有三种类型

@property(nonatomic) UIImagePickerControllerSourceType sourceType

UIImagePickerControllerSourceTypePhotoLibrary:照片库,默认值

UIImagePickerControllerSourceTypeCamera:摄像头

UIImagePickerControllerSourceTypeSavedPhotosAlbum:相薄

2、媒体类型     

@property(nonatomic,copy) NSArray *mediaTypes,需要导入框架<MobileCoreServices/MobileCoreServices.h>

默认情况下此数组包含kUTTypeImage,所以拍照时可以不用设置;但是当要录像的时候必须设置,可以设置为kUTTypeVideo(视频,但不带声音)或者kUTTypeMovie(视频并带有声音)

3、视频最大录制时长,默认为10s

@property(nonatomic) NSTimeInterval videoMaximumDuration

4、视频质量,枚举类型

@property(nonatomic) UIImagePickerControllerQualityType  videoQuality

UIImagePickerControllerQualityTypeHigh:高清质量

UIImagePickerControllerQualityTypeMedium:中等质量,适合WiFi传输

UIImagePickerControllerQualityTypeLow:低质量,适合蜂窝网传输

UIImagePickerControllerQualityType640x480:640*480

UIImagePickerControllerQualityTypeIFrame1280x720:1280*720

UIImagePickerControllerQualityTypeIFrame960x540:960*540

5、摄像头设备,cameraDevice是枚举类型

@property(nonatomic) UIImagePickerControllerCameraDevice  cameraDevice

UIImagePickerControllerCameraDeviceRear:前置摄像头

UIImagePickerControllerCameraDeviceFront:后置摄像头

6、设置图像编辑,允许选取器框定和拉伸图像。默认为NO。

@property(nonatomic)BOOL  allowsEditing

7、UIImagePickerController的代理方法

1) 相册图片选中之后调用

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

//key:UIImagePickerControllerOriginalImage 取原始图片

//key:UIImagePickerControllerEditedImage  取编辑后的图片

//key:UIImagePickerControllerMediaType    获取到媒体类型

UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];

//选中以后退出相册

[picker dismissViewControllerAnimated:YES completion:NULL];

}

2) 取消按钮的点击事件

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

[picker dismissViewControllerAnimated:YES completion:NULL];

}

五、将视频保存到相册

1、判断该视频能否保存

UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path)

1、若返回YES,开始保存,在这里传入的是NSURL对象的path属性

UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);

2、保存以后调用

- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo, error为nil 代表保存成功

六、使用UIImagePickerController拍照和录像

1、创建UIImagePickerController对象。

2、指定拾取源,平时选择照片时使用的拾取源是照片库或者相簿,可以指定摄像头

3、设置媒体类型mediaType,注意如果是录像必须设置,如果是拍照此步骤可以省略,因为mediaType默认包含kUTTypeImage(注意媒体类型定义在MobileCoreServices.framework中)

4、展示UIImagePickerController(通常以模态窗口形式打开)。

5、拍照和录制视频结束后在代理方法中展示/保存照片或视频

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容