调用:
let imgV = UIImageView.init(frame: CGRect.init(x: 0, y: 100, width: 100, height: 100))
let newImg = #imageLiteral(resourceName: "zzz").redrawOvalImage(size: CGSize.init(width: 30, height: 30), bgColor: UIColor.white)
imgV.image = newImg
view.addSubview(imgV)
extension UIImage {
/// 重新绘制圆形图片
///
/// - Parameters:
/// - image: 原图
/// - size: 绘制尺寸
/// - bgColor: 裁剪区域外的背景颜色
/// - Returns: 新图
func redrawOvalImage(size: CGSize?, bgColor: UIColor?) -> UIImage? {
// 绘制区域
let rect = CGRect(origin: CGPoint(), size: size ?? CGSize.zero)
// 开启图形上下文 size:绘图的尺寸 opaque:不透明 scale:屏幕分辨率系数,0会选择当前设备的屏幕分辨率系数
UIGraphicsBeginImageContextWithOptions(rect.size, true, 0)
// 背景颜色填充
bgColor?.setFill()
UIRectFill(rect)
// 圆形路径
let path = UIBezierPath(ovalIn: rect)
// 进行路径裁切,后续的绘图都会出现在这个圆形路径内部
path.addClip()
// 绘制图像 在指定区域拉伸并绘制
draw(in: rect)
// 从图形上下文获取图片
let result = UIGraphicsGetImageFromCurrentImageContext()
// 关闭上下文
UIGraphicsEndImageContext()
return result
}
}
网友评论