在很多時候我們需要對一張圖片進行裁剪,儘管CALayer已經爲我們提供了很多方便,可以輕易實現圓形,圓角矩形,甚至直角+圓角的矩形,然而在一些特殊情況下,需要對圖片進行不規則形狀(比如半個⭐️)裁剪的時候,就需要一些手段來進行圖片處理了。
1.首先準備好原圖
CGSize size = image.size;
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
3.將原圖先畫入內存中
[image drawInRect:CGRectMake(0,0, size.width, size.height)];
4.讀取mask圖片
UIImage* mask = [UIImage imageNamed:@"mask.png"];
5.(核心)將原圖以mask爲模版進行切割
[mask drawInRect:CGRectMake(0, 0, size.width, size.width)
//此處的參數可分爲source和destination,分別去共同部分和不同部分。
UIImage* retImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (imageCount == 3) {
head_s = 26;
CGRect rcImage = CGRectMake((bg_width - head_s) / 2, (bg_height - head_s - 3), head_s, head_s);
[rectArray addObject:[NSValue valueWithCGRect:rcImage]];
rcImage = CGRectMake(0, 0, head_s, head_s);
[rectArray addObject:[NSValue valueWithCGRect:rcImage]];
[rectArray addObject:[NSValue valueWithCGRect:rcImage]];
for ( int j=0; j<imageCount; ++j ){
UIImage *image_inx = [imageArray objectAtIndex:j];
if (imageCount > 2 || j == 0) {
double angel = startAngel - 2 * j * M_PI / imageCount;
image_inx = [self maskImageWithSize:image_inx angle:angel];
}
CGRect rcImage = [[rectArray objectAtIndex:j] CGRectValue];
CGContextDrawImage(context, rcImage, image_inx.CGImage);
}