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="http://www.lvtao.net/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="http://www.lvtao.net/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="http://www.lvtao.net/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;
iOS实现头像选取(照相或者图片库)、大小等比缩放、生成圆形头像相关推荐
- android生成圆形头像
/*各种各样的图如何如何生成圆形头像,请下面看下面,可以先用bitmp直接用 Bitmap.createScaledBitmap(),如果是存到数据库里面的话,先把转它转成string,然后放取出来, ...
- php gd库 圆形头像,基于 GD 库生成圆形头像
基于 GD 库生成圆形头像 laravel 友好的图片处理库 Intervention Image 可以绘制圆形(circle()), 但是好像并不能将即存的图片裁剪成圆形, 这里提供一个基于 GD ...
- php生成固定大小缩略图变形,php按指定大小等比缩放生成上传图片缩略图_PHP教程...
php教程按指定大小等比缩放生成上传图片缩略图 /** * * *等比缩放 * @param unknown_type $srcImage 源图片路径 * @param unknown_type $t ...
- php生成固定大小缩略图变形,php实现按指定大小等比缩放生成上传图片缩略图的方法_PHP...
本文实例讲述了php实现按指定大小等比缩放生成上传图片缩略图的方法.分享给大家供大家参考.具体实现方法如下: 代码如下: /** * * *等比缩放 * @param unknown_type $sr ...
- iOS---头像选取(照相或者图片库)、大小等比缩放、生成圆形头像
转载自:http://www.lvtao.net/ios/509.html //弹出actionsheet.选择获取头像的方式 //从相册获取图片 -(void)takePictureClick:(U ...
- 微信小程序海报画布生成圆形头像
由于海报需求将用户头像在海报上呈圆形 实现过程如下 // 绘制圆形头像 //绘制的头像宽度let avatarurl_width = 40 //绘制的头像高度let avatarurl_heigth ...
- python和本人很像的卡通头像_用Python做一个网站,照片生成漫画头像,有这个网站就够了。...
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:Python进阶者 对于动漫,大家一定都不陌生,小编周 ...
- java 海报二: 如何生成圆形头像
直接上代码 //测试头像 String url = "https://thirdwx.qlogo.cn/mmopen/vi_32/ibwibmjniabu5JFwMl1Ju5drHnibjm ...
- itchat 保存好友信息以及生成好友头像图片墙
2019 第 41 篇,总第 65 篇文章 本文大约 4000 字,阅读大约需要 12 分钟 最近简单运用 itchat 这个库来实现一些简单的应用,主要包括以下几个应用: 统计保存好友的数量和信息 ...
最新文章
- 小A与欧拉路(牛客-树的直径)
- Exchange工具11—性能监视器
- ZooKeeper伪分布式集群安装及使用
- java的3个初始化_通过实例解析Java类初始化和实例初始化
- Cloud for Customer UI Designer里embedded component刷新的讨论
- c/c++ 数组和指针
- 常用技巧性CSS:颜色渐变,截断英文单词,阴影文字.
- 按键精灵 识别html,【院刊】-【201409期】抓取网页指定内容(资料),获取网页里的图片 _ 学院院刊 - 按键精灵论坛...
- Allegro视频教程
- 计算机职业规划书备选方案,职业规划书备选方案
- 【024】基于51单片机的电子琴加音乐播放器系统Proteus仿真设计
- react后台管理项目
- 元界Metaverse清单:你需要知道的一切
- php orc 验证码,百度图片识别orc实现普通验证码识别
- “3G域名”遭恶炒 用友移动代理被指画饼圈钱
- 1078 字符串压缩与解压
- 白话Elasticsearch59-数据建模实战_ Nested Aggregation/ Reverse nested Aggregation对嵌套的博客评论数据进行聚合分析
- 软件测试可以分为哪几个类型?
- ObjectArx自定义实体入门(C++)及注意事项
- 联盟商家入驻三级分销商城系统开发app