在构建自定义相机时,我正在寻找一些指导。我在之前的项目中使用了方形裁剪来拍摄照片,但现在我需要创建一个自定义裁剪形状。我应该用路径或面具做这个吗?
我需要将裁剪的图像添加到另一个图像并生成一个png图像,并将两个图像组合在一起。请参考照片,了解我正在构建的内容。
目前正在构建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
}
答案 0 :(得分:1)
将原始照片放入UIImageView
并执行:
let mask = CAShapeLayer()
mask.path = createBezierPath()
imageView.layer.mask = mask
它应该只显示内部裁剪的面部。
如果您想要新的UIImage
,请使用renderInContext()
方法。