最近對(duì)圖片的處理較多,就總結(jié)出一個(gè)UIImage分類(UIImage+ZJIamge.h),以便之后使用。
此分類的功能有:
1、圖片切圓(可帶邊框)
2、給圖片添加水?。ㄋ】蔀槲淖只驁D片)
3、截屏或者截取某個(gè)view的視圖
4、根據(jù)顏色生成圖片
5、圖片的等比例縮放
6、圖片的自由拉伸
思路:利用Quartz2D框架,開啟圖形上下文將圖片繪制出來(lái)并處理之后,關(guān)閉圖形上下文并生成一張新的圖片即可。
1、圖片切圓(可帶邊框)
/**
圖片裁剪,適用于圓形頭像之類
@param image 要切圓的圖片
@param borderWidth 邊框的寬度
@param color 邊框的顏色
@return 切圓的圖片
*/
+ (UIImage *)imageWithClipImage:(UIImage *)image borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)color
{
// 圖片的寬度和高度
CGFloat imageWH = image.size.width;
// 設(shè)置圓環(huán)的寬度
CGFloat border = borderWidth;
// 圓形的寬度和高度
CGFloat ovalWH = imageWH + 2 * border;
// 1.開啟上下文
UIGraphicsBeginImageContextWithOptions(CGSizeMake(ovalWH, ovalWH), NO, 0);
// 2.畫大圓
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, ovalWH, ovalWH)];
[color set];
[path fill];
// 3.設(shè)置裁剪區(qū)域
UIBezierPath *clipPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(border, border, imageWH, imageWH)];
[clipPath addClip];
// 4.繪制圖片
[image drawAtPoint:CGPointMake(border, border)];
// 5.獲取圖片
UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();
// 6.關(guān)閉上下文
UIGraphicsEndImageContext();
return clipImage;
}
2、給圖片添加水?。ㄋ】蔀槲淖趾蛨D片)
(1)、添加文字水印
/**
根據(jù)文字生成水印圖片
@param imageName 圖片
@param str 水印文字
@param point 繪制水印文字的起始點(diǎn)
@param dict 水印文字的屬性字典
@return 返回圖片
*/
+ (UIImage *)imageWithWaterMarkImage:(NSString *)imageName text:(NSString *)str textPoint:(CGPoint)point textAttributes:(NSDictionary *)dict
{
UIImage *image = [UIImage imageNamed:imageName];
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
//把圖片畫上去
[image drawAtPoint:CGPointZero];
//繪制文字到圖片
[str drawAtPoint:point withAttributes:dict];
// 從上下文獲取圖片
UIImage *imageWater = UIGraphicsGetImageFromCurrentImageContext();
//關(guān)閉上下文
UIGraphicsEndImageContext();
return imageWater;
}
(2)、添加圖片水印
/**
根據(jù)圖片生成水印圖片
@param image 圖片
@param waterImage 水印圖片
@param rect 水印圖片的位置
@return 返回圖片
*/
+ (UIImage *)imageWithWaterMarkImage:(UIImage *)image waterImage:(UIImage *)waterImage waterImageRect:(CGRect)rect{
//1.開啟上下文
UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
//2.繪制背景圖片
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
//繪制水印圖片到當(dāng)前上下文
[waterImage drawInRect:rect];
//3.從上下文中獲取新圖片
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
//4.關(guān)閉圖形上下文
UIGraphicsEndImageContext();
//返回圖片
return newImage;
}
3、截屏或者截取某個(gè)view視圖
/**
截屏或者截取某個(gè)view視圖
@param captureView 要截取的view視圖
@return 返回截圖
*/
+ (UIImage *)imageWithCaptureView:(UIView *)captureView
{
//開啟位圖上下文
UIGraphicsBeginImageContextWithOptions(captureView.bounds.size, NO, 0);
//獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//把控件上的圖層渲染到上下文
[captureView.layer renderInContext:ctx];
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
//關(guān)閉上下文
UIGraphicsEndImageContext();
return screenImage;
}
4、根據(jù)顏色生成圖片
/**
根據(jù)顏色生成圖片
@param color 顏色
@param size 圖片的尺寸
@return 返回生成的圖片
*/
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size
{
CGRect rect = CGRectMake(0, 0, size.width, size.height);
//開啟位圖上下文
UIGraphicsBeginImageContext(rect.size);
//獲取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context,color.CGColor);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
//關(guān)閉上下文
UIGraphicsEndImageContext();
return image;
}
5、圖片的等比例縮放
/**
圖片的等比例縮放
@param image 圖片
@param defineWidth 要縮放到的寬度
@return 返回與原圖片等寬高比的圖片
*/
+ (UIImage *)imageWithOriginImage:(UIImage *)image scaleToWidth:(CGFloat)defineWidth
{
CGSize imageSize = image.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
CGFloat targetWidth = defineWidth;
CGFloat targetHeight = height / (width / targetWidth);
CGSize size = CGSizeMake(targetWidth, targetHeight);
UIGraphicsBeginImageContext(size); //size 為CGSize類型,即你所需要的圖片尺寸
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
6、圖片的自由拉伸
/**
根據(jù)圖片名返回一張能夠自由拉伸的圖片
@param name 圖片名
@param width 自由拉伸的寬度
@param height 自由拉伸的高度
@return 返回圖片
*/
+ (UIImage *)imageWithResizedImage:(NSString *)name capWidth:(CGFloat)width capHeight:(CGFloat)height
{
UIImage *image = [UIImage imageNamed:name];
return [image stretchableImageWithLeftCapWidth:width topCapHeight:height];
}