2016-06-23 9 views
0

Я пробовал как минимум 5 различных способов, которые я нашел здесь, но ничего не сработало. Все не менее 1-2 лет. С тех пор Apple что-то изменила в правилах?Crop Square UIImage в Rounded Rect

снимок экрана, обрезать его на площади, а затем я пытаюсь обрезать ее углы с радиусом 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]] 

Даже если я попытаюсь значительно увеличить радиус угла, все равно ничего не произойдет.

+1

Post, что вы пробовали. – Code

+0

@code только что разместил его – Gukki5

ответ

0

На данный момент вы, вероятно, нашли какое-то решение там, но для следующих, которые прибудут сюда, это решение может помочь. Это немного обходное решение, так как оно использует 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/