二维码图片扫描 绘制扫描的图片的边框 (简单的添加一张图片来识别的没有访问相簿) 以后可能会加上 想知道的请关注一下
@IBAction func detectorQRCode() {
// .1 获取需要识别的图片
let image = sourceImageView.image
let imageCI = CIImage(image: image!)
// 开始识别
// 1. 创建一个二维码探测器
let dector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy: CIDetectorAccuracyHigh])
// 2. 直接探测二维码特征
let features = dector.featuresInImage(imageCI!)
var resultImage = image
var result = [String]()
for feature in features {
// print(feature)
let qrFeature = feature as! CIQRCodeFeature
// print(qrFeature.messageString)
result.append(qrFeature.messageString)
// print(qrFeature.bounds)
resultImage = drawFrame(resultImage!, feature: qrFeature)
sourceImageView.image = resultImage
}
let alertVC = UIAlertController(title: "结果", message: result.description, preferredStyle: UIAlertControllerStyle.Alert)
// 添加关闭行为
let action = UIAlertAction(title: "关闭", style: UIAlertActionStyle.Default) { (action: UIAlertAction) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alertVC.addAction(action)
presentViewController(alertVC, animated: true, completion: nil)
}
func drawFrame(image: UIImage, feature: CIQRCodeFeature) -> UIImage {
let size = image.size
print(size)
// 1. 开启图形上下文
UIGraphicsBeginImageContext(size)
// 2. 绘制大图片
image.drawInRect(CGRectMake(0, 0, size.width, size.height))
// 转换坐标系(上下颠倒)特别注意坐标系的转换
let context = UIGraphicsGetCurrentContext()
CGContextScaleCTM(context, 1, -1)
CGContextTranslateCTM(context, 0, -size.height)
// 3. 绘制路径
let bounds = feature.bounds
let path = UIBezierPath(rect: bounds)
UIColor.redColor().setStroke()
path.lineWidth = 6
path.stroke()
// 4. 取出结果图片
let resultImage = UIGraphicsGetImageFromCurrentImageContext()
// 5. 关闭上下文
UIGraphicsEndImageContext()
// 6. 返回结果
return resultImage
}