1. 程式人生 > >iOS基礎之UIImageView(二)

iOS基礎之UIImageView(二)

ont height ger graphic ntc eal eth extc 通道

1 UIImage 任意角度旋轉

#import "UIImage+ImageRotate.h"
#import <QuartzCore/QuartzCore.h>
#import <Accelerate/Accelerate.h>

@implementation UIImage (ImageRotate)

/**
 UIImage 任意角度旋轉
 1 將圖片渲染到上下文 context
 2 將 context 旋轉一定的角度
 3 將旋轉之後的 context 轉化為 UIImage
 */
- (UIImage *)imageRaotateIndegree:(float
)degree { // 1 將圖片渲染到上下文 context size_t width = (size_t)self.size.width * self.scale; size_t height = (size_t)self.size.height * self.scale; // 每行圖片數據字節 size_t bytesPerRow = width * 4; // alpha 通道 CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst; // 配置上下文參數 CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8
, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault | alphaInfo); if (!bmContext) { return nil; } CGContextDrawImage(bmContext, CGRectMake(0, 0, width, height), self.CGImage); // 2 將 context 旋轉一定的角度 UInt8 *data = (UInt8 *)CGBitmapContextGetData(bmContext); vImage_Buffer src
= {data, height, width, bytesPerRow}; vImage_Buffer dest = {data, height, width, bytesPerRow}; Pixel_8888 bgColor = {0, 0, 0, 0}; vImageRotate_ARGB8888(&src, &dest, NULL, degree, bgColor, kvImageBackgroundColorFill); // 3 將旋轉之後的 context 轉化為 UIImage CGImageRef rotateImageRef = CGBitmapContextCreateImage(bmContext); UIImage *rotateImage = [UIImage imageWithCGImage:rotateImageRef scale:self.scale orientation:UIImageOrientationUp]; return rotateImage; } @end

2 圖片任意位置裁剪

#import "UIImage+ImageCut.h"

/**
 圖片任意位置裁剪
 */
- (UIImage *)imageCutSize:(CGRect)rect {
    // 1 將需要剪切的部分取出來
    CGImageRef subImageRef = CGImageCreateWithImageInRect(self.CGImage, rect);
    CGRect smallRect = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));
    // 2 將圖片繪制到上下文中
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawImage(context, rect, subImageRef);
    // 3 將當前上下文保存為UIImage
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

@end

3 圖片圓角剪切

#import "UIImage+ImageCircle.h"

@interface view: UIView

@property (nonatomic, strong) UIImage *image;

@end

@implementation view

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextAddEllipseInRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height));
    CGContextClip(context);
    CGContextFillPath(context);
    [_image drawAtPoint:CGPointMake(0, 0)];
    CGContextRestoreGState(context);
}

@end

@implementation UIImage (ImageCircle)

/**
 圖片圓角剪切
 */
- (UIImage *)imageClipCircle {
    CGFloat imageSizeMin = MIN(self.size.width, self.size.height);
    CGSize imageSize = CGSizeMake(imageSizeMin, imageSizeMin);
    
    view *mView = [[view alloc] init];
    mView.image = self;
    
    UIGraphicsBeginImageContext(imageSize);
    CGContextRef context = UIGraphicsGetCurrentContext();
    mView.frame = CGRectMake(0, 0, imageSizeMin, imageSizeMin);
    mView.backgroundColor = [UIColor whiteColor];
    [mView.layer renderInContext:context];
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}
@end

4 圖片任意拉伸

#import "UIImage+ImageScale.h"

@implementation UIImage (ImageScale)

/**
 圖片任意拉伸
 */
- (UIImage *)imageScaleSize:(CGSize)size {
    UIGraphicsBeginImageContext(size);
    [self drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

@end

5 屏幕截屏

#import "UIView+ImageScreenShot.h"

@implementation UIView (ImageScreenShot)

/**
 屏幕截屏
 */
- (UIImage *)imageScreenShot {
    UIGraphicsBeginImageContext(self.frame.size);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    [self.layer renderInContext:context];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    return image;
}

@end

6 圖片添加文字及logo水印效果

#import "UIImage+ImageWaterPrint.h"

@implementation UIImage (ImageWaterPrint)

/**
 圖片添加文字及logo水印效果
 */
- (UIImage *)imageWater:(UIImage *)imageLogo waterString:(NSString *)waterString {
    UIGraphicsBeginImageContext(self.size);
    // 1 原始圖片渲染
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
    
    // 2 將logo渲染到右下角
    [imageLogo drawInRect:CGRectMake(self.size.width - 20, self.size.height - 20, 16, 16)];
    
    // 3 將文字渲染到左上角
    NSMutableParagraphStyle *paragraphStype = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    paragraphStype.lineBreakMode = NSLineBreakByCharWrapping;
    NSDictionary *dict = @{NSFontAttributeName: [UIFont systemFontOfSize:20],
                           NSForegroundColorAttributeName: [UIColor redColor],
                           NSParagraphStyleAttributeName: paragraphStype};
    [waterString drawInRect:CGRectMake(0, 0, 300, 50) withAttributes:dict];
    
    // 4 將當前上下文保存為UIImage
    UIImage *imageNew = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    return imageNew;
}

@end

iOS基礎之UIImageView(二)