UIImage的分類(圖片裁剪、截取、拉伸、縮放、添加水印等)

最近對(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];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 舉國(guó)痛 文/陳浮 九寨仙境劫難生, 天妒美景發(fā)威怒, 一七八八七點(diǎn)零, 凡塵慘劇舉國(guó)痛!
    lsjr陳浮閱讀 182評(píng)論 11 12
  • 幸福的小黃豆0426閱讀 163評(píng)論 0 0
  • 文/細(xì)嗅薔薇88 古風(fēng)不復(fù)有, 何以安情懷? 遙寄相思月, 卻攜秋雨來(lái)。 寒風(fēng)襲薄衾, 輾轉(zhuǎn)東方白。 愿君勤望月,...
    夜雨殘燈閱讀 372評(píng)論 0 4
  • 她無(wú)憂無(wú)慮地嬉戲著,一心覺(jué)得世間只有陽(yáng)光和歡樂(lè)。直到有一天,她墜入黑暗的地府。唯一可以安慰的是,她將永遠(yuǎn)葆有少女的...
    火燒風(fēng)閱讀 1,227評(píng)論 0 0

友情鏈接更多精彩內(nèi)容