如何剪切我作为faceViewBounds收到的框架以在脸部周围形成一个大圆圈?这就像一个人脸上的徽章。用CIDetector和CIFaceFeature的脸部剪切圆形图像
也许我应该得到faceViewBounds的中心,然后我必须在ImageView.image中找到这个中心,然后绘制一个大直径的圆,然后用逻辑将其余的圆剪除,但是我不知道如何做到这一点..任何建议?
func detectFaceFrom(ImageView theImageView: UIImageView) {
guard let personImage = CIImage(image: theImageView.image!) else {
return
}
let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyLow]
let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy)
let faces = faceDetector?.features(in: personImage)
let ciImageSize = personImage.extent.size
var transform = CGAffineTransform(scaleX: 1, y: -1)
transform = transform.translatedBy(x: 0, y: -ciImageSize.height)
if(faces?.count==1){
for face in faces as! [CIFaceFeature] {
var faceViewBounds = face.bounds.applying(transform)
let viewSize = theImageView.bounds.size
let scale = min(viewSize.width/ciImageSize.width,
viewSize.height/ciImageSize.height)
let offsetX = (viewSize.width - ciImageSize.width * scale)/2
let offsetY = (viewSize.height - ciImageSize.height * scale)/2
faceViewBounds = faceViewBounds.applying(CGAffineTransform(scaleX: scale, y: scale))
faceViewBounds.origin.x += offsetX
faceViewBounds.origin.y += offsetY
let faceBox = UIView(frame: faceViewBounds)
faceBox.layer.borderWidth = 3
faceBox.layer.borderColor = UIColor.green.cgColor
faceBox.backgroundColor = UIColor.clear
drawCircleFromCenter(faceViewBounds.center ???
}
return cuttedCircleWithFace
}else{
return theImageView.image
}
}
我刚才看到了Facebook的广告与我要实现这个目标完全一样的东西:
是的,我想这一点,但我不希望它被放大等之后。我希望它像您展示的第一张照片一样被缩小 - “之前”。 –
'CIDetector'会给你的脸和眼睛和嘴巴紧密裁剪的界限。如果你想要更多的周围图像,你可以添加像'rect = rect.insetBy(dx:-30,dy:-30)',其中30是你想要包括的宽度和高度的点数,在'rect.size.width = max(face.bounds.height,face.bounds.width)'之后,尽管你会需要做一些比这更复杂的事情,因为你的矩形可能会超出原始图像范围的范围。 – beyowulf
在我的iPhone上,屏幕被切割并且位置有误http://imgur.com/a/Fiu9G有什么建议吗? –