iOS_满聪

想要源码的朋友,可以留下QQ邮箱.
  博客园  :: 新随笔  :: 管理

iOS_UIImage_裁切圆形头像

Posted on 2016-12-06 16:34  iOS_满聪  阅读(809)  评论(0编辑  收藏  举报

github地址: https://github.com/mancongiOS/UIImage.git

UIImage的Cagetory

UIImage+ImageCircle.h

- (UIImage *)imageClicpCircleWithRect:(CGRect)rect;

UIImage+ImageCircle.m

#import "UIImage+ImageCircle.h"

@interface View : UIView
@property (nonatomic, strong) UIImage * image;
@end

@implementation View

- (void)drawRect:(CGRect)rect {
    
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextSaveGState(contextRef);
    
    // Ellipse --> 椭圆的
    CGContextAddEllipseInRect(contextRef, CGRectMake(rect.size.width / 4, rect.size.height / 4, rect.size.width / 2, rect.size.height / 2));
    CGContextClip(contextRef);
    CGContextFillPath(contextRef);
    [self.image drawAtPoint:CGPointMake(100, 0)];
    
    CGContextRestoreGState(contextRef);
}
@end

@implementation UIImage (ImageCircle)

- (UIImage *)imageClicpCircleWithRect:(CGRect)rect {
    
    View * myView = [[View alloc] init];
    myView.image = self;
    
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    myView.frame = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
    myView.backgroundColor = [UIColor orangeColor];
    [myView.layer renderInContext:context];
    
    UIImage * imageNew = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return imageNew;
}

@end

使用:

- (UIImageView *)imageView {
    if (_imageView == nil) {
        self.imageView = [[UIImageView alloc] init];
        self.imageView.backgroundColor = [UIColor redColor];
        
        
        UIImage * image = [UIImage imageNamed:@"1.jpg"];
        // 裁剪出来一个在原图中心点,半径为四分之一原图宽高最小值的圆.
        
        CGFloat imageSizeMin = MIN(image.size.width, image.size.height);
        
        CGFloat circleImageWH = imageSizeMin;
        CGFloat circleImage_x = (image.size.width - circleImageWH) / 2;
        CGFloat circleImage_y = (image.size.height - circleImageWH) / 2;
        

        self.imageView.image = [image imageClicpCircleWithRect:CGRectMake(circleImage_x, circleImage_y, circleImageWH, circleImageWH)];

    } return _imageView;
}