将方形 UIImage 裁剪为圆角矩形
Posted
技术标签:
【中文标题】将方形 UIImage 裁剪为圆角矩形【英文标题】:Crop Square UIImage into Rounded Rect 【发布时间】:2016-06-23 05:25:36 【问题描述】:我已经尝试了至少 5 种我在这里找到的不同方法,但都没有奏效。所有人都至少 1-2 岁。自那以后,Apple 是否改变了规则?
我截取屏幕截图,将其裁剪为正方形,然后尝试将其角裁剪为半径为 15。
也许有一种更严肃、更确定的方法可以用 OpenGL 做到这一点?
目前正在尝试这个解决方案,但角落仍然拒绝裁剪:
-(UIImage*) cropImage:(UIImage*)image withPath:(UIBezierPath*)path // where the UIBezierPath is defined in the UIKit coordinate system (0,0) is top left
CGRect r = CGPathGetBoundingBox(path.CGPath); // the rect to draw our image in (minimum rect that the path occupies).
UIGraphicsBeginImageContextWithOptions(r.size, NO, 0.0); // begin image context, with transparency & the scale of the image.
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, -r.origin.x, -r.origin.y); // translate context so that when we add the path, it starts at (0,0).
CGContextAddPath(ctx, path.CGPath); // add path.
CGContextClip(ctx); // clip any future drawing to the path region.
[image drawInRect:(CGRect)CGPointZero, image.size]; // draw image
UIImage* i = UIGraphicsGetImageFromCurrentImageContext(); // get image from context
UIGraphicsEndImageContext(); // clean up and finish context
return i; // return image
澄清一下,我实际上是在尝试删除我裁剪的像素
而我正在路过...
[self cropImage:myImage withPath:[UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, screenImage.size.width, screenImage.size.height) cornerRadius:15.0]]
即使我尝试大大增加拐角半径,仍然没有任何反应。
【问题讨论】:
发布你的尝试。 @code 刚刚发布 【参考方案1】:此时您可能已经找到了一些解决方案,但对于下一个将到达这里的解决方案,这里的解决方案可能会有所帮助。这是一种解决方法,因为它使用UIImageView
来完成绘图工作,但效果很好。
extension UIImage
var circle: UIImage?
let length = min(size.width, size.height)
let imageView = UIImageView(frame: CGRect(origin: .zero, size: CGSize(width: length, height: length)))
imageView.contentMode = .scaleAspectFill
imageView.image = self
imageView.layer.cornerRadius = length/2
imageView.layer.masksToBounds = true
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale)
guard let context = UIGraphicsGetCurrentContext() else return nil
imageView.layer.render(in: context)
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return result
如果您想要更强大的解决方案,这里的解决方案可能会有所帮助:https://github.com/giacgbj/UIImageSwiftExtensions/
【讨论】:
以上是关于将方形 UIImage 裁剪为圆角矩形的主要内容,如果未能解决你的问题,请参考以下文章