二维码图片扫描 绘制扫描的图片的边框(Swift)

二维码图片扫描 绘制扫描的图片的边框 (简单的添加一张图片来识别的没有访问相簿) 以后可能会加上 想知道的请关注一下

      @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




}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值