iOS Swift - 在UIImage上绘制线条以保存到文件

时间:2015-04-01 23:57:57

标签: ios swift uiimage

我发现的所有iOS绘图信息都与如何在视图中显示内容有关。特别是在视图中分层不同的图像,视图或路径以在屏幕上显示。我无法找到关于如何实际操纵UIImage本身的信息。

具体来说,我希望打开一个图像文件作为UIImage(已经知道如何做到这一点),在该图像中画一条线,然后将新的UIImage保存到文件中(已经知道怎么做了)这也是)。我认为有一个相当简单的方法可以做到这一点,但我找到的每个解决方案似乎都进入了一个复杂的解决方案,这似乎有点过分,因为我认为这将是一个小任务。我怎么能这么做呢?或者是更复杂的解决方案必要的方式?

我猜测类似于此的事情之前已经得到了解答,但我在该领域缺乏知识似乎使得难以正确搜索并找到这些答案。

2 个答案:

答案 0 :(得分:1)

来自&坐标是图像像素单位

func drawLineOnImage(size: CGSize, image: UIImage, from: CGPoint, to: CGPoint) -> UIImage {
    UIGraphicsBeginImageContext(size)
    image.drawAtPoint(CGPointZero)
    let context     = UIGraphicsGetCurrentContext()
    CGContextSetLineWidth(context, 1.0)
    CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
    CGContextMoveToPoint(context, from.x, from.y)
    CGContextAddLineToPoint(context, to.x, to.y)
    CGContextStrokePath(context)

    let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return resultImage
}

你可以使用Objective-c回答Here

答案 1 :(得分:1)

根据Nadeesha Lakmal的回答更新了Swift 4

func drawLineOnImage(size: CGSize, image: UIImage, from: CGPoint, to: CGPoint) -> UIImage {
    UIGraphicsBeginImageContext(size)
    image.draw(at: CGPoint.zero)
    guard let context = UIGraphicsGetCurrentContext() else { return UIImage() }
    context.setLineWidth(1.0)
    context.setStrokeColor(UIColor.blue.cgColor)
    let startPoint = CGPoint(x: from.x, y: from.y)
    let endPoint = CGPoint(x: to.x, y: to.y)
    context.move(to: startPoint)
    context.addLine(to: endPoint)
    context.strokePath()

    guard let resultImage = UIGraphicsGetImageFromCurrentImageContext() else { return UIImage() }
    UIGraphicsEndImageContext()
    return resultImage
}