写在前面

所有功能演示

我们肯定做过这样的需求,给一个图片切圆角,
当然我们大多采用简单粗暴的方法
myIcon.layer.cornerRadius = 16.5
myIcon.layer.masksToBounds = true
如果是静态的页面也无关紧要,要是可以滑动的页面,
有很多需要裁剪的图片,那么就要考虑性能了。接下来的方法就是其中一种不错的方法,
此代码已经上传到githup[DDGScreenShot](https://github.com/dudongge/DDGScreenShot)
欢迎查看[DDGScreenShot](https://github.com/dudongge/DDGScreenShot)
当然这只是这个库的功能的一小部分
想看更多功能,可以去github上下载,如果对您有帮助,希望您不吝给个star.
功能代码如下:

具体代码

1,采用UIBezierPath绘制路径的方法
let image = UIImage(named: imageName)//开启上下文UIGraphicsBeginImageContext((image?.size)!)//设置一个圆形的裁剪区域let path = UIBezierPath(ovalIn: CGRect(x: 0,y: 0,width: (image?.size.width)!,height: (image?.size.height)!))//把路径设置为裁剪区域(超出裁剪区域以外的内容会被自动裁剪掉)
path.addClip()
//把图片绘制到上下文当中
image?.draw(at: CGPoint.zero)
//从上下文当中生成一张图片
let newImage = UIGraphicsGetImageFromCurrentImageContext()
//关闭上下文
UIGraphicsEndImageContext()
newImage 就是我们需要的图片

可能你会怀疑性能,好,可以,我们放在子线程里进行,代码如下

DispatchQueue.global().async{//将上述代码发放进去即可let image = UIImage(named: imageName)//开启上下文UIGraphicsBeginImageContext((image?.size)!)//设置一个圆形的裁剪区域let path = UIBezierPath(ovalIn: CGRect(x: 0,y: 0,width: (image?.size.width)!,height: (image?.size.height)!))//把路径设置为裁剪区域(超出裁剪区域以外的内容会被自动裁剪掉)
path.addClip()
//把图片绘制到上下文当中
image?.draw(at: CGPoint.zero)
//从上下文当中生成一张图片
let newImage = UIGraphicsGetImageFromCurrentImageContext()
//关闭上下文
UIGraphicsEndImageContext()DispatchQueue.main.async(execute: {//拿到 newImage 到主线程更新UIcompleted(newImage)})}

似乎已经完美的解决了这个问题,可是截取圆角固定的圆角该怎么办呢,继续往下看,代码如下

  /**** 用异步绘图方式将图片进行任意圆角裁剪- imageName --传头头像名称- cornerRadius --传头头像名称*/public func tailoringImage(_ imageName: String,withRadius radius: CGFloat) -> UIImage? {let image = UIImage(named: imageName)if image == nil {return UIImage()}//开启上下文UIGraphicsBeginImageContext((image?.size)!)//设置一个圆形的裁剪区域let path = UIBezierPath(roundedRect: CGRect(x: 0,y: 0,width: (image?.size.width)!,height: (image?.size.height)!), cornerRadius: radius)//把路径设置为裁剪区域(超出裁剪区域以外的内容会被自动裁剪掉)path.addClip()//把图片绘制到上下文当中image?.draw(at: CGPoint.zero)//从上下文当中生成一张图片let newImage = UIGraphicsGetImageFromCurrentImageContext()//关闭上下文UIGraphicsEndImageContext()return newImage}

当然也可以在子线程中进行

/**** 用异步绘图方式将图片进行任意圆角裁剪- imageName --传头头像名称- cornerRadius --要设置圆角的大小- parameter completed:    异步完成回调(主线程回调)*/public func async_tailoringImage(_ imageName: String,withRadius radius: CGFloat,completed:@escaping (UIImage?) -> ()) -> Void {DispatchQueue.global().async{let newImage = self.tailoringImage(imageName, withRadius: radius)DispatchQueue.main.async(execute: {completed(newImage)})}}//当然你还不满意,因为产品一句:加上个边框吧,总有办法实现,不信,请看代码:

切圆角,加边框

/**** 绘图方式将图片裁剪成圆角并添加边框- imageName --传头头像名称- borderWidth --边框大小- borderColor --边框颜色*/public func tailoringImageLayer(_ image: UIImage,borderWidth width:CGFloat,borderColor color: UIColor ) -> UIImage? {//1.先开启一个图片上下文 ,尺寸大小在原始图片基础上宽高都加上两倍边框宽度.let imageSize = CGSize(width: image.size.width + width * 2 , height: image.size.height + width * 2)UIGraphicsBeginImageContext(imageSize)//2.填充一个圆形路径.这个圆形路径大小,和上下文尺寸大小一样.//把大圆画到上下文当中.let path = UIBezierPath(ovalIn: CGRect(x: 0,y: 0,width: imageSize.width,height: imageSize.height))//颜色设置color.set()//填充path.fill()//3.添加一个小圆,小圆,x,y从边框宽度位置开始添加,宽高和原始图片一样大小.把小圆设为裁剪区域.let clipPath = UIBezierPath(ovalIn: CGRect(x: width, y: width, width: image.size.width, height: image.size.height))//把小圆设为裁剪区域.clipPath.addClip()//4.把图片给绘制上去.image.draw(at: CGPoint(x: width, y: width))//5.从上下文当中生成一张图片let newImage = UIGraphicsGetImageFromCurrentImageContext()//6.关闭上下文UIGraphicsEndImageContext()return  newImage}/**** 异步绘图方式将图片裁剪成圆角并添加边框- imageName --传头头像名称- borderWidth --边框大小- borderColor --边框颜色- parameter completed:    异步完成回调(主线程回调)*/public func async_tailoringImageLayer(_ image: UIImage,borderWidth width:CGFloat,borderColor color: UIColor ,completed:@escaping (UIImage?) -> ()) -> Void {DispatchQueue.global().async{let newImage = self.tailoringImageLayer(image, borderWidth: width, borderColor: color)DispatchQueue.main.async(execute: {completed(newImage)})}}

上图片

结束语

总算大功告成,此代码已经上传到githup[DDGScreenShot](https://github.com/dudongge/DDGScreenShot)
[link](https://github.com/dudongge/DDGScreenShot)
当然这只是这个库的功能的一小部分
想看更多功能,可以去github上下载,如果对您有帮助,希望您不吝给个star.

欢迎查看DDGScreenShot

其余功能如下

  1. (一)DDGScreenShot — 复杂屏幕截屏(如view ScrollView webView wkwebView)
  2. (二)DDGScreenShot--iOS 图片处理--多图片拼接
  3. (三)DDGScreenShot--iOS 图片裁剪,切圆角,加边框,你还用cornerRadius,还有更高级的用法
  4. (四)DDGScreenShot—图片擦除功能
  5. (五)DDGScreenShot—截取图片的任意部分
  6. (六)DDGScreenShot —图片加各种滤镜高逼格操作
  7. (七)DDGScreenShot —图片加高斯模糊,老电影效果

转载于:https://www.cnblogs.com/dudongge/p/9013619.html

DDGScreenShot--iOS 图片裁剪,切圆角,加边框,你还用cornerRadius,还有更高级的用法...相关推荐

  1. DDGScreenShot--iOS 图片裁剪,圆角设置,你还用cornerRadius,还有更高级的方法

    写在前面 我们肯定做过这样的需求,给一个图片切圆角, 当然我们大多采用简单粗暴的方法 myIcon.layer.cornerRadius = 16.5 myIcon.layer.masksToBoun ...

  2. DDGScreenShot —iOS 图片裁剪,切圆角,加边框,你还用cornerRadius,还有更高级的方法...

    写在前面 我们肯定做过这样的需求,给一个图片切圆角, 当然我们大多采用简单粗暴的方法 myIcon.layer.cornerRadius = 16.5 myIcon.layer.masksToBoun ...

  3. ios 图片裁剪框架_iOS图片裁剪器 – RSKImageCropper

    RSKImageCropper iOS图片裁剪器,类似Contacts应用中的图片定位美化. 基础使用方法 导入类header. #import Just create a view controll ...

  4. 前端裁图-如何使用ps软件将矩形图片裁剪成圆角矩形

    1.ps打开一个图片 2.用矩形工具画出一个矩形覆盖在要裁剪的图形上 3.将圆角矩形转化为矩形选区,方式:ctrl+鼠标左键(鼠标左键选中的是矩形图层,一般图层在ps界面的右侧栏) 矩形变为选区后是一 ...

  5. [iOS]UIButton/UIImageView导圆角设边框

    UIButton/UIImageView导圆角设边框 UIButton部分: UIButton *tempBit = [[UIButton alloc] init];[tempBit setFrame ...

  6. iOS 图片裁剪,旋转角度,微调角度 LEGOImageCropper

    实现与效果 微调角度 90°角旋转 改变宽高比例 旋转和微调过程中适应边框填充边界 源码 微调角度 - (void)beginTrackingWithTouch {// 开始微调角度}- (void) ...

  7. 图片裁剪与圆角半径设置(将图片裁剪为圆形)

    如上: 需求:将左边图片改变为右边的图形 1.鼠标右键--用"裁剪图片",将图片裁剪为正方形 2.在"元件属性与样式"---样式---圆角半径,将圆角半径设置为 ...

  8. iOS 图片裁剪(用户头像裁剪)

    图片裁剪 把一张图片裁剪为指定的样式,比如常见的用户头像 思路: 在图片的基础上绘制时,需要创建一个位图上下文 确定裁剪区域(超出裁剪区域的都将被清除) 绘制图片 从位图上下文中获取图片 关闭上下文 ...

  9. ios 图片裁剪-制作圆形QQ头像

    /**  *  图片裁剪  裁剪原理:  先在控制器上确定一个区域,然后再把需要裁剪的图片放在该区域上面,超出区域的图片都不显示  *  *  @param rect  */ -(void) draw ...

最新文章

  1. org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
  2. std::string 用法
  3. Sublime 初始化
  4. DCDC 高端 NMOS 的自举秘诀
  5. 树莓派PyQt5触摸屏软键盘调用实现
  6. allure定制测试报告logo
  7. 道高一尺 魔高一丈 内存泄漏智能指针
  8. dtree做权限控制
  9. word如何设置上标形式_word如何将107中的7设置为上标表示形式
  10. 用沐神的方法阅读PyTorch FX论文
  11. 【多元统计分析】12.逐步回归
  12. 通过网线和EasyFatAP软件切换AP工作模式(瘦版切换胖版)
  13. Echarts官方社区,炫酷的Echarts 基地
  14. java ace admin_ace-admin-master
  15. 开源堡垒机JumpServer的资产及用户配置说明
  16. 2023计算机毕业设计SSM最新选题之javaJAVA高校田径运动会管理61s38
  17. CSR蓝牙的Class of Device的说明
  18. 在这个秋天,一起收获亚马逊云科技认证吧!
  19. STM32L475 硬件SPI+软件SPI驱动ST7789V2
  20. 概率统计笔记:用python实现贝叶斯回归

热门文章

  1. 计算机网络无权限,无法访问您可能没有权限使用网络资源
  2. python多人聊天室_python实现简单多人聊天室
  3. layout_weight的作用以及意义
  4. 如果你一直都是在假装学习,那么你永远不可能进步!
  5. Allegro PCB转换成PADS方法
  6. 移动端设置input或者textarea宽度100%时不超出屏幕
  7. T29389 中忍考试:宁次VS鸣人-白眼!
  8. x11vnc 在 Debian 更新 编译 安装
  9. Python+Vue计算机毕业设计博客管理系统pkq76(源码+程序+LW+部署)
  10. Mvp-10隔膜泵串口编程