iOS之帶有邊框的圓形圖片裁剪

具體實(shí)現(xiàn)思路:

  • 1.假設(shè)邊框?qū)挾葹锽orderW
  • 2.開啟的圖片上下文的尺寸就應(yīng)該是原始圖片的寬高分別加上兩倍的BorderW,這樣開啟的目的是為了不讓原始圖片變形.
  • 3.在上下文上面添加一個(gè)圓形填充路徑.位置從(0,0)點(diǎn)開始,寬高和上下文尺寸一樣大.設(shè)置顏色為要設(shè)置的邊框顏色.
  • 4.繼續(xù)在上下文上面添加一個(gè)圓形路徑,這個(gè)路徑為裁剪路徑.
    它的x,y分別從BorderW這個(gè)點(diǎn)開始.寬度和高度分別和原始圖片的寬高一樣大.將繪制的這個(gè)路徑設(shè)為裁剪區(qū)域.
  • 5.把原始路徑繪制到上下文當(dāng)中.繪制的位置和是裁剪區(qū)域的位置相同,x,y分別從border開始繪制.
  • 6.從上下文狀態(tài)當(dāng)中取出圖片.
  • 7.關(guān)閉上下文狀態(tài).

圖形參照:


3.gif
加載要裁剪的圖片

UIImage *image = [UIImage imageNamed:@"阿貍頭像"];

  • 0.設(shè)置邊框大小.
    CGFloat borderW = 10;
  • 1.開啟一個(gè)和原始圖片一樣大小的位圖上下文.
UIGraphicsBeginImageContextWithOptions(size,NO,0);```
 -  2.繪制一個(gè)大圓,填充
``` UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, size.width, size.height)];    
[[UIColor blueColor] set];
[path fill];```
 -   3.添加一個(gè)裁剪區(qū)域.
```path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderW, borderW, image.size.width, image.size.height)];
[path addClip];```
 -   4.把圖片繪制到裁剪區(qū)域當(dāng)中.
 ```[image drawAtPoint:CGPointMake(borderW, borderW)];```
 -   5.生成一張新圖片.
```UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();```
 -   6.關(guān)閉上下文.
 ```UIGraphicsEndImageContext();```

######抽取分類方法:

```根據(jù)傳入的圖片,生成一終帶有邊框的圓形圖片.
borderW邊框?qū)挾?borderColor:邊框顏色
image:要生成的原始圖片.
+ (UIImage *)imageWithBorderW:(CGFloat)borderW borderColor:(UIColor *)color image:(UIImage *)image;

+ (UIImage *)imageWithBorderW:(CGFloat)borderW borderColor:(UIColor *)color image:(UIImage *)image;```
  - 1.開啟一個(gè)和原始圖片一樣大小的位圖上下文.
```CGSize size = CGSizeMake(image.size.width + 2 *borderW, image.size.height + 2 * borderW);
UIGraphicsBeginImageContextWithOptions(size,NO,0);```
  -  2.繪制一個(gè)大圓,填充
```UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, size.width, size.height)];   
[[UIColor blueColor] set];
[path fill];```
  -  3.添加一個(gè)裁剪區(qū)域.
```path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderW, borderW, image.size.width, image.size.height)];
[path addClip];```
  -  4.把圖片繪制到裁剪區(qū)域當(dāng)中.
```[image drawAtPoint:CGPointMake(borderW, borderW)];```
  -  5.生成一張新圖片.
```UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();```
  -  6.關(guān)閉上下文.
```UIGraphicsEndImageContext();       return clipImage;```
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Quartz2D以及drawRect的重繪機(jī)制字?jǐn)?shù)1487 閱讀21 評(píng)論1 喜歡1一、什么是Quartz2D Q...
    PurpleWind閱讀 906評(píng)論 0 3
  • 1.圓形圖片裁剪 目標(biāo)明確: 得到一張圖片 (=> 位圖上下文,手動(dòng)開啟和關(guān)閉,代碼位置任意)思路:先設(shè)置好位圖上...
    夏天不冷閱讀 901評(píng)論 0 1
  • 展示效果: 請(qǐng)問:實(shí)現(xiàn)的步驟是什么? 第一步,需求:需要把一張普通的圖片可以裁剪成圓形顯示,.請(qǐng)問:圖片裁減的思路...
    青蔥烈馬閱讀 1,593評(píng)論 0 6
  • 本學(xué)期“專心高效”2班最后一節(jié)課在今天完結(jié),第30次課還真是一波三折。一個(gè)都不能少,因?yàn)楹⒆觽儗?duì)最后一節(jié)課充滿期待...
    拉比教育劉芳閱讀 367評(píng)論 1 0
  • 今天我來給大家介紹一家很奇葩的家庭。在這個(gè)家庭里,老公不是老公是爸爸。女兒不是女兒是管家。兒子你不是兒子是孫子。老...
    一切都那么美好閱讀 439評(píng)論 0 5

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