一、图像加载
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、拍照和录制视频结束后在代理方法中展示/保存照片或视频
网友评论