四舍五入并向 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() }
}
我有一个扩展 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() }
}