您的位置:首页 > 移动开发 > IOS开发

IOS-照相,相片选取

2015-10-20 15:13 260 查看

初始化

UIImagePickerControllerSourceType sourceType;
switch (buttonIndex)
{
case 0:

sourceType = UIImagePickerControllerSourceTypeCamera;
if (![UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
{
sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
break;
default:
sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;
break;
}

NSString *mediaType = AVMediaTypeVideo;
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];

if(authStatus ==AVAuthorizationStatusRestricted){//此应用程序没有被授权访问的照片数据。可能是家长控制权限。

}else if(authStatus == AVAuthorizationStatusDenied){// 用户已经明确否认了这一照片数据的应用程序访问
[self showAlertView:@"热波间需要访问你的相机" message:@"头像修改,热波间需要访问你的相机权限。点击“设置”前往系统设置允许热波间访问你的相机" confirm:^(id sender) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

} cancel:^(id sender) {

}];
return;
}
else if(authStatus == AVAuthorizationStatusAuthorized){//用户已授权应用访问照片数据.

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = sourceType;
picker.mediaTypes = @[(NSString *) kUTTypeImage];
[self presentViewController:picker animated:YES completion:nil];

}else if(authStatus == AVAuthorizationStatusNotDetermined){// 用户尚未做出了选择这个应用程序的问候.一次一出现

[AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {//弹出授权弹框
if(granted){//点击允许访问时调用
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = sourceType;
picker.mediaTypes = @[(NSString *) kUTTypeImage];
[self presentViewController:picker animated:YES completion:nil];
}
else {
return ;
}

}];
}else {
NSLog(@"Unknown authorization status");
}


Delegate

#pragma mark UIImagePickerController Delegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

if ([mediaType isEqualToString:@"public.image"])
{
MBProgressHUD *mbProgressHud = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:mbProgressHud];
[mbProgressHud show:YES];

//[info objectForKey:@"UIImagePickerControllerEditedImage"];
NSString *tempDir = NSTemporaryDirectory ();
NSString *tempFile = [NSString stringWithFormat:@"%@/avatar.png",tempDir];
UIImage *avatar = [info objectForKey:@"UIImagePickerControllerEditedImage"];

float scale = MAX(avatar.size.width/150,avatar.size.height/150);
avatar = [UIImage imageWithCGImage:avatar.CGImage scale:scale orientation:UIImageOrientationUp];
[UIImagePNGRepresentation(avatar) writeToFile:tempFile atomically:YES];

__weak typeof(self) weakSelf = self;
updateCurrUserModel *userModel = [[updateCurrUserModel alloc] init];
[userModel uploadDataWithFileUrl:tempFile params:nil success:^(id object) {
__strong typeof(self) strongSelf = weakSelf;
if (strongSelf)
{
/*成功返回数据*/
if (userModel.result == 0)
{
strongSelf.selectedImg = avatar;
strongSelf.headImgView.image = avatar;
strongSelf.userInfo.photo = userModel.data;
float quality = .00001f;
float blurred = .2f;
NSData *imageData = UIImageJPEGRepresentation([strongSelf.headImgView image], quality);
UIImage *blurredImage = [[UIImage imageWithData:imageData] blurredImage:blurred];
_backImageView.image = blurredImage;
[UserInfoManager shareUserInfoManager].currentUserInfo.photo = userModel.data;

NSError *error;
[[NSFileManager defaultManager] removeItemAtPath:tempFile error:&error];
}
}
[mbProgressHud hide:YES];

} fail:^(id object) {
/*失败返回数据*/
[mbProgressHud hide:YES];
[self showNoticeInWindow:@"网络连接失败,请重试" duration:1.5];
}];

}

[picker dismissViewControllerAnimated:YES completion:nil];
}


图片裁剪

获取到图片后反转

//压缩图片
- (UIImage *)image:(UIImage*)image scaledToSize:(CGSize)newSize
{
// Create a graphics image context
UIGraphicsBeginImageContext(newSize);
// Tell the old image to draw in this new context, with the desired
// new size
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Get the new image from the context
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
// End the context
UIGraphicsEndImageContext();
// Return the new image.
return newImage;
}


方法2

//裁剪图片
- (UIImage *)cutImage:(UIImage*)image
{
//压缩图片
CGSize newSize;
CGImageRef imageRef = nil;

if ((image.size.width / image.size.height) < (_headerView.bgImgView.size.width / _headerView.bgImgView.size.height)) {
newSize.width = image.size.width;
newSize.height = image.size.width * _headerView.bgImgView.size.height / _headerView.bgImgView.size.width;

imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(0, fabs(image.size.height - newSize.height) / 2, newSize.width, newSize.height));

} else {
newSize.height = image.size.height;
newSize.width = image.size.height * _headerView.bgImgView.size.width / _headerView.bgImgView.size.height;

imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(fabs(image.size.width - newSize.width) / 2, 0, newSize.width, newSize.height));

}

return [UIImage imageWithCGImage:imageRef];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: