您的位置:首页 > 移动开发 > IOS开发

开发笔记 那些年追过的图片(十) 图片处理成圆形

2013-10-12 09:33 633 查看
[plain] view
plaincopy

#import <UIKit/UIKit.h>  

  

@interface UIImage (Rounded)  

  

+ (id)createRoundedRectImage:(UIImage*)image size:(CGSize)size radius:(NSInteger)r;  

  

@end  

[plain] view
plaincopy

#import "UIImage+Rounded.h"  

  

@implementation UIImage (Rounded)  

  

static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth,  

                                 float ovalHeight)  

{  

    float fw, fh;  

      

    if (ovalWidth == 0 || ovalHeight == 0)  

    {  

        CGContextAddRect(context, rect);  

        return;  

    }  

      

    CGContextSaveGState(context);  

    CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));  

    CGContextScaleCTM(context, ovalWidth, ovalHeight);  

    fw = CGRectGetWidth(rect) / ovalWidth;  

    fh = CGRectGetHeight(rect) / ovalHeight;  

      

    CGContextMoveToPoint(context, fw, fh/2);  // Start at lower right corner  

    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);  // Top right corner  

    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1); // Top left corner  

    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1); // Lower left corner  

    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // Back to lower right  

      

    CGContextClosePath(context);  

    CGContextRestoreGState(context);  

}  

  

+ (id)createRoundedRectImage:(UIImage*)image size:(CGSize)size radius:(NSInteger)r  

{  

    // the size of CGContextRef  

    int w = size.width;  

    int h = size.height;  

      

    UIImage *img = image;  

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  

    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);  

    CGRect rect = CGRectMake(0, 0, w, h);  

      

    CGContextBeginPath(context);  

    addRoundedRectToPath(context, rect, r, r);  

    CGContextClosePath(context);  

    CGContextClip(context);  

    CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);  

    CGImageRef imageMasked = CGBitmapContextCreateImage(context);  

    img = [UIImage imageWithCGImage:imageMasked];  

      

    CGContextRelease(context);  

    CGColorSpaceRelease(colorSpace);  

    CGImageRelease(imageMasked);  

      

    return img;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios image