如何在多点裁剪图像后保存UIImage?

3
我希望您能在图片上进行多点裁剪(请参见图片)。这很好用。我的问题是,在裁剪图像后,如何保存UIImage。我正在使用CAShapeLayer来裁剪图像。下面的代码用于多点裁剪。
- (void)multiPointCrop:(CGPoint)cropPoint
{
    UIBezierPath *aPath = [UIBezierPath bezierPath];
    [aPath moveToPoint:cropPoint];

    for (NSString *pointString in self.touchPoints) { 
        if ([self.touchPoints indexOfObject:pointString] != 0)
            [aPath addLineToPoint:CGPointFromString(pointString)];
    }
    [aPath addLineToPoint:cropPoint];
    [aPath closePath];

    [self setClippingPath:aPath andView:self];
    [self setNeedsDisplay];
}

- (void)setClippingPath:(UIBezierPath *)clippingPath andView:(UIView *)view;
{
    if (![[view layer] mask])
        [[view layer] setMask:[CAShapeLayer layer]];

    [(CAShapeLayer*) [[view layer] mask] setPath:[clippingPath CGPath]];
}

如何从CAShapeLayer保存UIImage?如果这是多个裁剪的正确方法或其他轻松实现此操作的方法,请提供您的想法、建议、源代码等,欢迎任何内容。enter image description here

1个回答

2
尝试将图层渲染到上下文中,然后从该上下文创建图像。
CALayer *layer = view.layer;
CGSize s = layer.frame.size;
// create context
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, s.width, s.height,
                                             8, (s.width * 4),
                                             colorSpace, kCGImageAlphaPremultipliedLast);

// flip Y
CGContextTranslateCTM(context, 0.0, s.height);    
CGContextScaleCTM(context, 1.0, -1.0);

// render layer
[layer renderInContext:context];

CGImageRef imgRef = CGBitmapContextCreateImage(context);
// here is your image
UIImage *img = [UIImage imageWithCGImage:imgRef];  

// release owned memory
CGImageRelease(imgRef);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);

1
你成功保存了遮罩图像吗?请帮帮我,告诉我你是否完成了这个任务。 - Kanan Vora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接