在很多时候我们需要对一张图片进行裁剪,尽管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);
}
本文介绍了一种使用Mask切割技术轻松实现图片不规则形状裁剪的方法,通过预先准备切割形状的非半透明图片并与目标图片求交集,可以高效地获得所需的裁剪效果。以QQ多人聊天组头像为例,展示了如何通过Mask切割技术实现梅花状头像组的绘制,包括计算头像位置、确定角度和进行裁剪等关键步骤。
3495

被折叠的 条评论
为什么被折叠?



