绘制识别到的二维码边框

1. 通过探测器返回的二维码,若直接显示,可能用户体检不佳,一般会对返回的二维码图片进行加工后显示
2. 另外若屏幕内存在多个可识别的二维码,不对识别到的二维码进行处理,难以判断二维码情况,所以需要对识别到的二维码图片进行处理。
3. 对于多个可识别二维码,一般都会限制扫描区域,只返回一个二维码进行处理
4. 绘制识别到的二维码边框本质是通过Quartz2D框架来绘制图片,详细可见Quartz2D框架

绘制识别到的二维码边框代码实现

  1. swift
    class func drawRectInImage(qrFeature: CIQRCodeFeature, image: UIImage) -> UIImage
    {
        // 1. 获取图片大小
        let size = image.size
    
        // 2. 开启绘图上下文
        UIGraphicsBeginImageContext(size)
    
        // 3. 绘制图片到上下文中
        image.drawInRect(CGRectMake(0, 0, size.width, size.height))
    
        // 4. 反转坐标系(因为是别的二维码坐标是相对于图片的坐标, 坐标系是以竖屏左下角为(0,0)点,所以需要上下翻转坐标系(简单),或者转换坐标点)
        // 相对于原始图片, 坐标
        // 左下角是0, 0
        // 所以, 我们需要翻转坐标系(采用这种方案比较简单), 或者转换坐标点
        // 注意: 我们要求的是绘制的边框翻转, 而不是图片+边框
        // 所以, 应该在绘制图片之后, 再翻转坐标系
        let context = UIGraphicsGetCurrentContext()
        CGContextScaleCTM(context, 1.0, -1.0); // 按Y轴, 缩放-1
        CGContextTranslateCTM(context, 0, -size.height); // 需要往下平移一个图片高度
    
        // 5. 绘制边框
        // 5.1 拼接贝塞尔路径
        let path: UIBezierPath = UIBezierPath(rect: qrFeature.bounds)   // 根据二维码特征大小拼接路径
    
        // 5.2 设置路径属性
        UIColor.redColor().set()
        path.lineWidth = 6
        path.stroke()
    
        // 6. 从上下文中获取绘制后的图片
        let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    
        // 7. 关闭上下文
        UIGraphicsEndImageContext()
    
        // 返回图片
        return resultImage
    }
    

你可能感兴趣的:(绘制识别到的二维码边框)