在很多时候我们需要对一张图片进行裁剪,尽管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);
}