標籤:cgimage imageview wim row des 圖片圓角 pat bsp save
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(二)