如何剪切我作爲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有什麼建議嗎? –