iOS实现头像选取(照相或者图片库)、大小等比缩放、生成圆形头像

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

//弹出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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航