四舍五入并向 UIImage 添加边框 - 不是 UIImageView

Rounding and adding a border to a UIImage - Not UIImageView

我有一个扩展 UIImage 的角。这个扩展很好用。我还想在图像中添加 stroke/border。

我没有在 UIImageView 上执行所有这些操作的原因是图像的 scaling/aspect 比例发生了变化,所以它需要对图像进行圆形和描边,而不是 imageView 本身。

extension UIImage{
    var roundedImage: UIImage {
        let rect = CGRect(origin:CGPoint(x: 0, y: 0), size: self.size)

        let border = CAShapeLayer()
        border.path = CGPath(rect: rect, transform: nil)
        border.lineWidth = 10
        border.strokeColor = UIColor.red.cgColor


        UIGraphicsBeginImageContextWithOptions(self.size, false, 1)
        UIBezierPath(
            roundedRect: rect,
            cornerRadius: 40
            ).addClip()
        self.draw(in: rect)
        return UIGraphicsGetImageFromCurrentImageContext()!
    }
}

我通过添加 CAShapeLayer() 来添加红色描边取得了进步。只是想不通如何将它添加到 roundedImage 的实际路径中。或者这是否是正确的方法。

如何创建一个 UIImage 扩展来同时圆角并添加 border/stroke?

使用此扩展程序

 extension UIImage { 
  var rounded: UIImage? { 
     let rect = CGRect(origin: .zero, size: size)
     UIGraphicsBeginImageContextWithOptions(size, false, 0)
     defer { UIGraphicsEndImageContext() } 
     let bezierPath = UIBezierPath(roundedRect: rect, cornerRadius: 40)
     bezierPath.addClip() 
     bezierPath.lineWidth = 10
     draw(in: rect)
     guard let context = UIGraphicsGetCurrentContext() else { return nil } 
     context.setStrokeColor(UIColor.red.cgColor) 
     bezierPath.lineWidth = 10 
     bezierPath.stroke() 
     return UIGraphicsGetImageFromCurrentImageContext() }
     }