裁剪照片与自定义形状

时间:2017-01-29 07:45:55

标签: objective-c swift camera png crop

在构建自定义相机时,我正在寻找一些指导。我在之前的项目中使用了方形裁剪来拍摄照片,但现在我需要创建一个自定义裁剪形状。我应该用路径或面具做这个吗?

我需要将裁剪的图像添加到另一个图像并生成一个png图像,并将两个图像组合在一起。请参考照片,了解我正在构建的内容。

Custom crop shape

目前正在构建bezier路径,但不确定如何使用路径形状裁剪图像:

func createBezierPath() -> UIBezierPath {

    let path = UIBezierPath()
    path.move(to: CGPoint(x: 2, y: 26))

    path.addCurve(to: CGPoint(x: 0, y: 12), // ending point
        controlPoint1: CGPoint(x: 2, y: 14),
        controlPoint2: CGPoint(x: 0, y: 14))

    path.addLine(to: CGPoint(x: 0, y: 2))
    path.addArc(withCenter: CGPoint(x: 2, y: 2), // center point of circle
        radius: 2, 
        startAngle: CGFloat(M_PI), // π radians = 180 degrees = straight left
        endAngle: CGFloat(3*M_PI_2), // 3π/2 radians = 270 degrees = straight up
        clockwise: true) // startAngle to endAngle goes in a clockwise direction

    path.addLine(to: CGPoint(x: 8, y: 0))
    path.addArc(withCenter: CGPoint(x: 8, y: 2),
                radius: 2,
                startAngle: CGFloat(3*M_PI_2), // straight up
        endAngle: CGFloat(0), // 0 radians = straight right
        clockwise: true)

    path.addLine(to: CGPoint(x: 10, y: 12))
    path.addCurve(to: CGPoint(x: 8, y: 15), // ending point
        controlPoint1: CGPoint(x: 10, y: 14),
        controlPoint2: CGPoint(x: 8, y: 14))

    path.close() 

    return path
}

1 个答案:

答案 0 :(得分:1)

将原始照片放入UIImageView并执行:

let mask = CAShapeLayer()
mask.path = createBezierPath()
imageView.layer.mask = mask

它应该只显示内部裁剪的面部。 如果您想要新的UIImage,请使用renderInContext()方法。