2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > iOS实现头像选取(照相或者图片库) 大小等比缩放 生成圆形头像

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

时间:2023-06-21 11:16:05

相关推荐

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

<span class="comment">//弹出actionsheet。选择获取头像的方式</span><span class="comment">//从相册获取图片</span>-(<span class="keyword">void</span>)takePictureClick:(UIButton *)sender{<span class="comment">///*注:使用,需要实现以下<a target=_blank target="_blank" title="与协议相关的所有文章" class="c_tag" href="/tag/%E5%8D%8F%E8%AE%AE" style="color: rgb(51, 102, 153); text-decoration: none;">协议</a>:UIImagePickerControllerDelegate,</span><span class="comment">// UINavigationControllerDelegate</span><span class="comment">// */</span><span class="comment">//UIImagePickerController *picker = [[UIImagePickerController alloc]init];</span><span class="comment">////设置图片源(相簿)</span><span class="comment">//picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;</span><span class="comment">////设置代理</span><span class="comment">//picker.delegate = self;</span><span class="comment">////设置可以编辑</span><span class="comment">//picker.allowsEditing = YES;</span><span class="comment">////打开拾取器界面</span><span class="comment">//[self presentViewController:picker animated:YES completion:nil];</span><span class="indent"> </span>UIActionSheet* actionSheet = [[UIActionSheet alloc]<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span> initWithTitle:<span class="string">@"请选择文件来源"</span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span> <span class="keyword">delegate</span>:self<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span> cancelButtonTitle:<span class="string">@"取消"</span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span> destructiveButtonTitle:nil<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span> otherButtonTitles:<span class="string">@"照相机"</span>,<span class="string">@"摄像机"</span>,<span class="string">@"本地相簿"</span>,<span class="string">@"本地视频"</span>,nil];<span class="indent"> </span>[actionSheet showInView:self.view];<span class="indent"> </span>}<span class="preprocessor">#<span class="keyword">pragma</span> mark -</span><span class="preprocessor">#<span class="keyword">pragma</span> UIActionSheet Delegate</span>- (<span class="keyword">void</span>)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{<span class="indent"> </span>NSLog(<span class="string">@"buttonIndex = [%d]"</span>,buttonIndex);<span class="indent"> </span><span class="keyword">switch</span> (buttonIndex) {<span class="indent"> </span><span class="indent"> </span><span class="keyword">case</span> <span class="number">0</span>:<span class="comment">//照相机</span><span class="indent"> </span><span class="indent"> </span>{<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.<span class="keyword">delegate</span> = self;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.allowsEditing = YES;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;<span class="comment">//[self presentModalViewController:imagePicker animated:YES];</span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>[self presentViewController:imagePicker animated:YES completion:nil];<span class="indent"> </span><span class="indent"> </span>}<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword">break</span>;<span class="indent"> </span><span class="indent"> </span><span class="keyword">case</span> <span class="number">1</span>:<span class="comment">//摄像机</span><span class="indent"> </span><span class="indent"> </span>{<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.<span class="keyword">delegate</span> = self;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.allowsEditing = YES;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.videoQuality = UIImagePickerControllerQualityTypeLow;<span class="comment">//[self presentModalViewController:imagePicker animated:YES];</span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>[self presentViewController:imagePicker animated:YES completion:nil];<span class="indent"> </span><span class="indent"> </span>}<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword">break</span>;<span class="indent"> </span><span class="indent"> </span><span class="keyword">case</span> <span class="number">2</span>:<span class="comment">//本地相簿</span><span class="indent"> </span><span class="indent"> </span>{<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.<span class="keyword">delegate</span> = self;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.allowsEditing = YES;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;<span class="comment">//[self presentModalViewController:imagePicker animated:YES];</span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>[self presentViewController:imagePicker animated:YES completion:nil];<span class="indent"> </span><span class="indent"> </span>}<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword">break</span>;<span class="indent"> </span><span class="indent"> </span><span class="keyword">case</span> <span class="number">3</span>:<span class="comment">//本地视频</span><span class="indent"> </span><span class="indent"> </span>{<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.<span class="keyword">delegate</span> = self;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.allowsEditing = YES;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;<span class="comment">//[self presentModalViewController:imagePicker animated:YES];</span><span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>[self presentViewController:imagePicker animated:YES completion:nil];<span class="indent"> </span><span class="indent"> </span>}<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword">break</span>;<span class="indent"> </span><span class="indent"> </span><span class="keyword">default</span>:<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span><span class="keyword">break</span>;<span class="indent"> </span>}}<span class="preprocessor">#<span class="keyword">pragma</span> mark -</span><span class="preprocessor">#<span class="keyword">pragma</span> UIImagePickerController Delegate</span>- (<span class="keyword">void</span>)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{<span class="indent"> </span><span class="keyword">if</span> ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeImage]) {<span class="indent"> </span><span class="indent"> </span>UIImage *img = [info objectForKey:UIImagePickerControllerEditedImage];<span class="indent"> </span><span class="indent"> </span>[self performSelector:@selector(saveImage:) withObject:img afterDelay:<span class="number">0.5</span>];<span class="indent"> </span>}<span class="indent"> </span><span class="keyword">else</span> <span class="keyword">if</span> ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)kUTTypeMovie]) {<span class="indent"> </span><span class="indent"> </span>NSString *videoPath = [[info objectForKey:UIImagePickerControllerMediaURL] path];<span class="indent"> </span><span class="indent"> </span>self.fileData = [NSData dataWithContentsOfFile:videoPath];<span class="indent"> </span>}<span class="comment">//[picker dismissModalViewControllerAnimated:YES];</span><span class="indent"> </span>[picker dismissViewControllerAnimated:YES completion:nil];}- (<span class="keyword">void</span>)imagePickerControllerDidCancel:(UIImagePickerController *)picker{<span class="comment">//[picker dismissModalViewControllerAnimated:YES];</span><span class="indent"> </span><span class="indent"> </span>[picker dismissViewControllerAnimated:YES completion:nil];}- (<span class="keyword">void</span>)saveImage:(UIImage *)image {<span class="indent"> </span><span class="comment">//NSLog(@"保存头像!");</span><span class="indent"> </span><span class="comment">//[userPhotoButton setImage:image forState:UIControlStateNormal];</span><span class="indent"> </span>BOOL success;<span class="indent"> </span>NSFileManager *fileManager = [NSFileManager defaultManager];<span class="indent"> </span>NSError *error;<span class="indent"> </span><span class="indent"> </span>NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);<span class="indent"> </span>NSString *documentsDirectory = [paths objectAtIndex:<span class="number">0</span>];<span class="indent"> </span>NSString *imageFilePath = [documentsDirectory stringBy<a target=_blank target="_blank" title="与app相关的所有文章" class="c_tag" href="/tag/app" style="color: rgb(51, 102, 153); text-decoration: none;">app</a>endingPathComponent:<span class="string">@"selfPhoto.jpg"</span>];<span class="indent"> </span>NSLog(<span class="string">@"imageFile->>%@"</span>,imageFilePath);<span class="indent"> </span>success = [fileManager fileExistsAtPath:imageFilePath];<span class="indent"> </span><span class="keyword">if</span>(success) {<span class="indent"> </span><span class="indent"> </span>success = [fileManager removeItemAtPath:imageFilePath error:&error];<span class="indent"> </span>}<span class="comment">//UIImage *smallImage=[self scaleFromImage:image toSize:CGSizeMake(80.0f, 80.0f)];//将图片尺寸改为80*80</span><span class="indent"> </span>UIImage *smallImage = [self thumbnailWithImageWithoutScale:image size:CGSizeMake(<span class="number">93</span>, <span class="number">93</span>)];<span class="indent"> </span>[UIImageJPE<a target=_blank target="_blank" title="与grep相关的所有文章" class="c_tag" href="/tag/grep" style="color: rgb(51, 102, 153); text-decoration: none;">grep</a>resentation(smallImage, <span class="number">1.0</span>f) writeToFile:imageFilePath atomically:YES];<span class="comment">//写入文件</span><span class="indent"> </span>UIImage *selfPhoto = [UIImage imageWithContentsOfFile:imageFilePath];<span class="comment">//读取图片文件</span><span class="comment">//[userPhotoButton setImage:selfPhoto forState:UIControlStateNormal];</span><span class="indent"> </span>self.img.image = selfPhoto;}<span class="comment">// 改变图像的尺寸,方便上传服务器</span>- (UIImage *) scaleFromImage: (UIImage *) image toSize: (CGSize) size{<span class="indent"> </span>UIGraphicsBeginImageContext(size);<span class="indent"> </span>[image drawInRect:CGRectMake(<span class="number">0</span>, <span class="number">0</span>, size.width, size.height)];<span class="indent"> </span>UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();<span class="indent"> </span>UIGraphicsEndImageContext();<span class="indent"> </span><span class="keyword">return</span> newImage;}

2.保持原始图片的长宽比,生成需要尺寸的图片

<span class="comment">//2.保持原来的长宽比,生成一个缩略图</span>- (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize{<span class="indent"> </span>UIImage *newimage;<span class="indent"> </span><span class="keyword">if</span> (nil == image) {<span class="indent"> </span><span class="indent"> </span>newimage = nil;<span class="indent"> </span>}<span class="indent"> </span><span class="keyword">else</span>{<span class="indent"> </span><span class="indent"> </span>CGSize oldsize = image.size;<span class="indent"> </span><span class="indent"> </span>CGRect rect;<span class="indent"> </span><span class="indent"> </span><span class="keyword">if</span> (asize.width/asize.height > oldsize.width/oldsize.height) {<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.size.width = asize.height*oldsize.width/oldsize.height;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.size.height = asize.height;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.origin.x = (asize.width - rect.size.width)/<span class="number">2</span>;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.origin.y = <span class="number">0</span>;<span class="indent"> </span><span class="indent"> </span>}<span class="indent"> </span><span class="indent"> </span><span class="keyword">else</span>{<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.size.width = asize.width;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.size.height = asize.width*oldsize.height/oldsize.width;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.origin.x = <span class="number">0</span>;<span class="indent"> </span><span class="indent"> </span><span class="indent"> </span>rect.origin.y = (asize.height - rect.size.height)/<span class="number">2</span>;<span class="indent"> </span><span class="indent"> </span>}<span class="indent"> </span><span class="indent"> </span>UIGraphicsBeginImageContext(asize);<span class="indent"> </span><span class="indent"> </span>CGContextRef context = UIGraphicsGetCurrentContext();<span class="indent"> </span><span class="indent"> </span>CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);<span class="indent"> </span><span class="indent"> </span>UIRectFill(CGRectMake(<span class="number">0</span>, <span class="number">0</span>, asize.width, asize.height));<span class="comment">//clear background</span><span class="indent"> </span><span class="indent"> </span>[image drawInRect:rect];<span class="indent"> </span><span class="indent"> </span>newimage = UIGraphicsGetImageFromCurrentImageContext();<span class="indent"> </span><span class="indent"> </span>UIGraphicsEndImageContext();<span class="indent"> </span>}<span class="indent"> </span><span class="keyword">return</span> newimage;}

3.显示圆形头像

NSArray <span class="variable">*paths</span> = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);<span class="indent"> </span>NSString <span class="variable">*documentsDirectory</span> = [paths objectAtIndex:<span class="number">0</span>];<span class="indent"> </span>NSString <span class="variable">*imageFilePath</span> = [documentsDirectory stringByAppendingPathComponent:<span class="variable">@"</span>selfPhoto.jpg<span class="string">"];<span class="indent"> </span>NSLog(<span class="variable">@"</span>imageFile->><span class="variable">%@</span>"</span>,imageFilePath);<span class="indent"> </span>UIImage <span class="variable">*selfPhoto</span> = [UIImage imageWithContentsOfFile:imageFilePath];<span class="regexp">//</span><span class="indent"> </span>self.img.image = selfPhoto;<span class="indent"> </span>[self.img.layer setCornerRadius:CGRectGetHeight([self.img bounds]) / <span class="number">2</span>]; <span class="regexp">//</span>修改半径,实现头像的圆形化<span class="indent"> </span>self.img.layer.masksToBounds = YES;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。