//弹出actionsheet。选择获取头像的方式
//从相册获取图片-(void)takePictureClick:(UIButton *)sender
{///*注:使用,需要实现以下协议:UIImagePickerControllerDelegate,//UINavigationControllerDelegate//*///UIImagePickerController *picker = [[UIImagePickerController alloc]init];////设置图片源(相簿)//picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;////设置代理//picker.delegate = self;////设置可以编辑//picker.allowsEditing = YES;////打开拾取器界面//[selfPResentViewController:picker animated:YES completion:nil];UIActionSheet* actionSheet =[[UIActionSheet alloc]
initWithTitle:@"请选择文件来源"delegate:self
cancelButtonTitle:@"取消"destructiveButtonTitle:nil
otherButtonTitles:@"照相机",@"摄像机",@"本地相簿",@"本地视频",nil];
[actionSheet showInView:self.view];
}#pragmamark -#pragmaUIActionSheet Delegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"buttonIndex = [%d]",buttonIndex);switch(buttonIndex) {case0://照相机{
UIImagePickerController*imagePicker =[[UIImagePickerController alloc] init];
imagePicker.delegate=self;
imagePicker.allowsEditing=YES;
imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;//[self presentModalViewController:imagePicker animated:YES];[self presentViewController:imagePicker animated:YES completion:nil];
}
break;case1://摄像机{
UIImagePickerController*imagePicker =[[UIImagePickerController alloc] init];
imagePicker.delegate=self;
imagePicker.allowsEditing=YES;
imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;
imagePicker.videoQuality=UIImagePickerControllerQualityTypeLow;//[self presentModalViewController:imagePicker animated:YES];[self presentViewController:imagePicker animated:YES completion:nil];
}
break;case2://本地相簿{
UIImagePickerController*imagePicker =[[UIImagePickerController alloc] init];
imagePicker.delegate=self;
imagePicker.allowsEditing=YES;
imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//[self presentModalViewController:imagePicker animated:YES];[self presentViewController:imagePicker animated:YES completion:nil];
}
break;case3://本地视频{
UIImagePickerController*imagePicker =[[UIImagePickerController alloc] init];
imagePicker.delegate=self;
imagePicker.allowsEditing=YES;
imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//[self presentModalViewController:imagePicker animated:YES];[self presentViewController:imagePicker animated:YES completion:nil];
}
break;default:
break;
}
}#pragmamark -#pragmaUIImagePickerController Delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{if([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeImage]) {
UIImage*img =[info objectForKey:UIImagePickerControllerEditedImage];
[self performSelector:@selector(saveImage:) withObject:img afterDelay:0.5];
}elseif([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeMovie]) {
NSString*videoPath =[[info objectForKey:UIImagePickerControllerMediaURL] path];
self.fileData=[NSData dataWithContentsOfFile:videoPath];
}//[picker dismissModalViewControllerAnimated:YES];[picker dismissViewControllerAnimated:YES completion:nil];
}- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{//[picker dismissModalViewControllerAnimated:YES];[picker dismissViewControllerAnimated:YES completion:nil];
}- (void)saveImage:(UIImage *)image {//NSLog(@"保存头像!");//[userPhotoButton setImage:image forState:UIControlStateNormal];BOOL success;
NSFileManager*fileManager =[NSFileManager defaultManager];
NSError*error;
NSArray*paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString*documentsDirectory = [paths objectAtIndex:0];
NSString*imageFilePath = [documentsDirectory stringByAppendingPathComponent:@"selfPhoto.jpg"];
NSLog(@"imageFile->>%@",imageFilePath);
success=[fileManager fileExistsAtPath:imageFilePath];if(success) {
success= [fileManager removeItemAtPath:imageFilePath error:&error];
}//UIImage *smallImage=[self scaleFromImage:image toSize:CGSizeMake(80.0f, 80.0f)];//将图片尺寸改为80*80UIImage *smallImage = [self thumbnailWithImageWithoutScale:image size:CGSizeMake(93,93)];
[UIImageJPEGRepresentation(smallImage,1.0f) writeToFile:imageFilePath atomically:YES];//写入文件UIImage *selfPhoto = [UIImage imageWithContentsOfFile:imageFilePath];//读取图片文件//[userPhotoButton setImage:selfPhoto forState:UIControlStateNormal];self.img.image =selfPhoto;
}//改变图像的尺寸,方便上传服务器- (UIImage *) scaleFromImage: (UIImage *) image toSize: (CGSize) size
{
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0,0, size.width, size.height)];
UIImage*newImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();returnnewImage;
}
2.保持原始图片的长宽比,生成需要尺寸的图片
//2.保持原来的长宽比,生成一个缩略图- (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize
{
UIImage*newimage;if(nil ==image) {
newimage=nil;
}else{
CGSize oldsize=image.size;
CGRect rect;if(asize.width/asize.height > oldsize.width/oldsize.height) {
rect.size.width= asize.height*oldsize.width/oldsize.height;
rect.size.height=asize.height;
rect.origin.x= (asize.width - rect.size.width)/2;
rect.origin.y=0;
}else{
rect.size.width=asize.width;
rect.size.height= asize.width*oldsize.height/oldsize.width;
rect.origin.x=0;
rect.origin.y= (asize.height - rect.size.height)/2;
}
UIGraphicsBeginImageContext(asize);
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
UIRectFill(CGRectMake(0,0, asize.width, asize.height));//clear background[image drawInRect:rect];
newimage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}returnnewimage;
}
3.显示圆形头像
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString*documentsDirectory = [paths objectAtIndex:0];
NSString*imageFilePath = [documentsDirectory stringByAppendingPathComponent:@"selfPhoto.jpg"];
NSLog(@"imageFile->>%@",imageFilePath);
UIImage*selfPhoto = [UIImage imageWithContentsOfFile:imageFilePath];//self.img.image =selfPhoto;
[self.img.layer setCornerRadius:CGRectGetHeight([self.img bounds])/2]; //修改半径,实现头像的圆形化
self.img.layer.masksToBounds= YES;
希望能对大家有帮助,如果你有更好的实现方式。欢迎告诉我。
demo下载地址:http://download.csdn.net/detail/wangtao169447/7515487
https://github.com/wangtao169447/TakeAvatarPhoto