在 Swift 中擦除图片的最佳方法?

Best way to erase on a picture in Swift?

我正在尝试制作一个应用程序,我可以在其中擦除用户从 "Camera roll"[=26 导入的图片 中的背景=].
所以我想在 UIImage 上手绘一个 UIColor.clearColor。 所以我尝试使用 Core Graphics 在我的 UIImage 上绘制。
我最初尝试通过以下方式画线:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    if let touch = touches.first {
        lastPoint = touch.locationInView(self)
    }
}

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    if let touch = touches.first {
        var newPoint = touch.locationInView(self)
        lines.append(Line(start: lastPoint, end: newPoint))
        lastPoint = newPoint
        self.setNeedsDisplay()
    }
}

override func drawRect(rect: CGRect) {
    imageToSend.drawAtPoint(CGPointZero)
    var context = UIGraphicsGetCurrentContext()
    CGContextBeginPath(context)
    for line in lines {
        CGContextMoveToPoint(context, line.start.x, line.start.y)
        CGContextAddLineToPoint(context, line.end.x, line.end.y)
    }
    CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor) //tried with a red color here
    CGContextSetLineWidth(context, 80.0)
    CGContextSetLineCap(context, .Round)
}

问题是它很慢。Debug Session(xCode)中的内存使用量非常大high 以及 CPU 用法。
运行 应用 iPhone 6 秒。
那么在Swift的图片上有没有更好的擦除方法呢?
另一个问题是它会产生线条,我希望它更平滑。但这是另一个问题

我的假设是性能滞后是由频繁调用 drawRect 方法引起的 - 它在您的代码片段 - 渲染图像中确实做了很多工作。这个想法是用选择区域绘图视图覆盖包含图像的 UIImageView,它在图像视图的顶部进行绘图。所以它应该允许将区域绘图与图像绘图分开。因此,资源消耗很大的操作(图像绘制)应该只执行一次。

我已经实现了这个,你可以在这里查看我的示例应用程序:

https://github.com/melifaro-/CutImageSampleApp

更新

有了与图像对应的贝塞尔曲线路径后,裁剪图像就很容易了。您只需要:

let croppedCGImage =  CGImageCreateWithImageInRect(image.CGImage!, CGPathGetPathBoundingBox(path.CGPath));
let croppedImage = UIImage(CGImage: croppedCGImage!)  

我也推送了示例应用程序更改。希望对你有帮助。