本文主要讲解如何从照片库选择一张照片后将其裁剪成圆形头像并显示,类似于微信头像那种模式。

本文的方法也适用于当时拍照获取的图像,方法类似,所以不再赘述。

本文主要是在iOS 10环境下使用,此时如果要使用使用系统照片库、照相机等功能需要授权,授权方法如下:

右键点击工程目录中的“Info.plist文件——>Open As ——>Source Code”,打开复制以下你在应用中使用的隐私权限设置(描述自己修改):NSVideoSubscriberAccountUsageDescription

NSBluetoothPeripheralUsageDescription

蓝牙权限

NSSpeechRecognitionUsageDescription

语音识别权限

NSSiriUsageDescription

Siri权限

NSRemindersUsageDescription

NSPhotoLibraryUsageDescription

相册权限

kTCCServiceMediaLibrary

NSMotionUsageDescription

运动权限

NSMicrophoneUsageDescription

麦克风权限

NSAppleMusicUsageDescription

音乐权限

NSLocationWhenInUseUsageDescription

地理位置权限

NSLocationUsageDescription

地理位置权限

NSLocationAlwaysUsageDescription

地理位置权限

NSHomeKitUsageDescription

NSHealthUpdateUsageDescription

健康权限

NSHealthShareUsageDescription

健康权限

NSContactsUsageDescription

通讯录权限

NSCameraUsageDescription

摄像头权限

NSCalendarsUsageDescription

日历权限

下面,正式进入本文要实现的功能的代码编写。

1. 使用Xcode的storyboard创建一个button和一个p_w_picpathView

创建后的效果如下图1所示。其中,p_w_picpathView的尺寸影响最终显示的效果尺寸,请根据实际情况设置。

2. 创建一个UIImage的类别(Category)

创建新文件,选择“Objective-C File”,如下图2所示:

在弹出的如图3所示的对话框中,“File”写入类别的名称(本例中是DY),“File Type”选择Category,“Class”选择UIImage。然后点击“Next”按钮,将新文件保存。

3. 编写类别中的代码

UIImage+DY.h文件中

#import

@interface UIImage (DY)

+ (instancetype)circleOldImage:(UIImage *)originalImage borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor;

@end

UIImage+DY.m文件中#import "UIImage+DY.h"

@implementation UIImage (DY)

+ (instancetype)circleOldImage:(UIImage *)originalImage borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor

{

// 1.加载原图

UIImage *oldImage = originalImage;

// 2.开启上下文

CGFloat p_w_picpathW = oldImage.size.width + 2 * borderWidth;

CGFloat p_w_picpathH = oldImage.size.height + 2 * borderWidth;

CGSize p_w_picpathSize = CGSizeMake(p_w_picpathW, p_w_picpathH);

UIGraphicsBeginImageContextWithOptions(p_w_picpathSize, NO, 0.0);

// 3.取得当前的上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

// 4.画边框(大圆)

[borderColor set];

CGFloat bigRadius = p_w_picpathW * 0.5; // 大圆半径

CGFloat centerX = bigRadius; // 圆心

CGFloat centerY = bigRadius;

CGContextAddArc(ctx, centerX, centerY, bigRadius, 0, M_PI * 2, 0);

CGContextFillPath(ctx); // 画圆

// 5.小圆

CGFloat smallRadius = bigRadius - borderWidth;

CGContextAddArc(ctx, centerX, centerY, smallRadius, 0, M_PI * 2, 0);

// 裁剪(后面画的东西才会受裁剪的影响)

CGContextClip(ctx);

// 6.画图

[oldImage drawInRect:CGRectMake(borderWidth, borderWidth, oldImage.size.width, oldImage.size.height)];

// 7.取图

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

// 8.结束上下文

UIGraphicsEndImageContext();

return newImage;

}

@end

+(instancetype)circleOldImage:(UIImage *)originalImage borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)borderColor方法的说明:

1. 这是一个类方法,最终返回的是一个UIImage的类;

2. 方法中originalImage参数指的是从照片库或者拍照后选中的照片(可能是经过系统裁剪的);

3. 方法中borderWidth参数指的是最终显示的圆形图像的边框的宽度,可以可以根据自己的需要设置宽度;

4. 方法中的borderColor参数指的是最终显示的圆形图像的边框的颜色,可以可以根据自己的需要设置颜色。

4. 实现裁剪成圆形图像并显示

ViewController.h文件#import

#import "UIImage+DY.h"  //加载类别

@interface ViewController : UIViewController  //一定要添加这两个Delegate

@property (strong, nonatomic) UIImagePickerController *p_w_picpathPickerController;

- (IBAction)btnPressed:(id)sender;

@property (strong, nonatomic) IBOutlet UIImageView *ablumImageView;

@end

ViewController.m文件#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (IBAction)btnPressed:(id)sender {

if([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary]) {

//首先判断是否支持照片库,这个方法中的参数要和_p_w_picpathPickerController.sourceType的值保持一致

//如果支持

_p_w_picpathPickerController = [[UIImagePickerController alloc]init];

_p_w_picpathPickerController.view.backgroundColor = [UIColor orangeColor];

_p_w_picpathPickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

_p_w_picpathPickerController.delegate = self;

_p_w_picpathPickerController.allowsEditing = YES;  //该参数默认是NO,建议设置为YES,否则裁剪成圆形图片的方法将获取到的是椭圆形的图片,与你的预想大相径庭

[self presentViewController:_p_w_picpathPickerController animated:YES completion:nil];

}

}

- (void)p_w_picpathPickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

_ablumImageView.p_w_picpath = [UIImage circleOldImage:[info objectForKey:UIImagePickerControllerEditedImage] borderWidth:30.0f borderColor:[UIColor orangeColor]];

//该方法中Info的Key值“UIImagePickerControllerEditedImage”表示的是选择裁剪后的图片,如果使用这个Key值,则_p_w_picpathPickerController.allowsEditing的值需要设置为YES。

//如果_p_w_picpathPickerController.allowsEditing的值设置的NO,则这个Key的值应该设置为UIImagePickerControllerOriginalImage

/*

info中的Key的值有如下几个:

NSString *const  UIImagePickerControllerMediaType ;指定用户选择的媒体类型(文章最后进行扩展)

NSString *const  UIImagePickerControllerOriginalImage ;原始图片

NSString *const  UIImagePickerControllerEditedImage ;修改后的图片

NSString *const  UIImagePickerControllerCropRect ;裁剪尺寸

NSString *const  UIImagePickerControllerMediaURL ;媒体的URL

NSString *const  UIImagePickerControllerReferenceURL ;原件的URL

NSString *const  UIImagePickerControllerMediaMetadata;当来数据来源是照相机的时候这个值才有效

*/

[self dismissViewControllerAnimated:YES completion:nil];

}

- (void)p_w_picpathPickerControllerDidCancel:(UIImagePickerController *)picker{

[self dismissViewControllerAnimated:YES completion:nil];

}

@end

ios 裁剪圆形头像_iOS 裁剪圆形图像并显示(类似于微信头像)相关推荐

  1. php 微信头像 圆形,详解iOS 裁剪圆形图像并显示(类似于微信头像)

    本文主要讲解如何从照片库选择一张照片后将其裁剪成圆形头像并显示,类似于微信头像那种模式. 本文的方法也适用于当时拍照获取的图像,方法类似,所以不再赘述. 本文主要是在ios 10环境下使用,此时如果要 ...

  2. ios 裁剪圆形头像_详解iOS 裁剪圆形图像并显示(类似于微信头像)

    本文主要讲解如何从照片库选择一张照片后将其裁剪成圆形头像并显示,类似于微信头像那种模式. 本文的方法也适用于当时拍照获取的图像,方法类似,所以不再赘述. 本文主要是在iOS 10环境下使用,此时如果要 ...

  3. 大蟒蛇python头像_【Python图像】给你的头像+1

    早些年,微信朋友圈有段时间非常流行这个头像+1的套路,简直逼死强迫症. 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 涉及知识: Pyt ...

  4. ios 裁剪框大小_ios 裁剪框大小_PS裁剪工具的使用,简单明了,学会了不求人,再也不用上百度查了......

    大家好,我是小新疆.今天继续给大家分享Photoshop的知识,小伙伴们快搬来小板凳准备好本本和笔,我们要开始啦.看完要去练习呦.分享是一种美德,关注是一种鼓励!要是喜欢小新疆的分享记得点关注呦!每日 ...

  5. ios设置中性黑体_ios 解决自定义字体无法显示问题

    现在的项目中都会使用自定义字体,而iOS9其中的一项新特性就是用新的「苹方」字体替代了已经使用了几年的「华文黑体」,所以现在记录一下iOS如何导入并在项目中使用苹方字体的使用. 1. 下载一个 .tf ...

  6. html2canvas微信头像没绘制,解决使用canvas生成含有微信头像的邀请海

    本站最新发布   C#从入门到精通 试听地址https://www.xin3721.com/eschool/CSharpxin3721/ 最近做了一个微信内访问的H5页面,长按分享图片发送朋友邀请的海 ...

  7. python头像右上角加红色数字_利用python实现微信头像加红色数字功能

    通过Python实现将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 实现过程: 准备两张图片如下: 使用PIL图像处理库,导入moudle ...

  8. python程序设置头像_利用python实现微信头像加红色数字功能

    通过Python实现将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 实现过程: 准备两张图片如下: 使用PIL图像处理库,导入moudle ...

  9. 怎样把照片中的头像扶正_一个男人的微信头像,往往暴露了“人品”,你是哪一种?...

    小米,曾经在去非洲旅行的时候,认识了一位很有共同话题的"驴友",两个人年龄相仿,三观相合,简直是一拍即合.最吸引小米的,是这个男人不仅阳光,帅气,而且还很有品位,从衣着到发型,再到 ...

最新文章

  1. java 桶排序_[图解] 桶排序
  2. Android 解决Android的TextView和EditText换行问题
  3. VB6 XArrayDB | Xarray ReDim 用法
  4. javadoc源码获取
  5. es6 --- 数组的扩展
  6. 添加组合索引时,做相等运算字段应该放在最前面
  7. 进行api的HTML5inlinehook操作(飞秋官方下载)
  8. IE9预览版已全面支持HTML5标准
  9. 硬盘数据恢复软件FinalData使用心得
  10. Java 常用数据类型(总结)
  11. 监听Dom节点失焦触发方法的几个思路
  12. R语言回归分析-改进异常值
  13. 使用计算机的场所和用途,天天在使用计算机,很多东西我竟然不知道!
  14. 高光时刻 | 方正璞华联合开发的「人力资源法律服务共享平台」在创新创业大赛中获奖
  15. CTF中php相关考点
  16. DouPHP模块化企业网站管理系统源码 v1.6
  17. 坐标变换学习笔记—代码篇Matlab
  18. JAVA TIME API总结
  19. ANDROID动态加载 使用SO库时要注意的一些问题
  20. 计算机创造奇迹的英语作文,英语作文_可以创造奇迹的3D打印机 (有声)_沪江英语...

热门文章

  1. 2016年十大商业领袖:敢于冒险,善于坚持,勇于自省
  2. 志愿者(传智杯真题)
  3. Windows10 电源计划只有平衡模式解决办法
  4. 以太坊核心概念(二)
  5. mysql取时间最近的记录_MySQL获取距离当前日期最近的记录
  6. vscode格式化文件时 vue文件报错
  7. SSOP封装和TSSOP封装能否兼容?
  8. 常见证书密钥格式与标准
  9. Lombok插件的安装以及使用
  10. 阿里研究员:线下环境为何不稳定?怎么破