Swift中的QR码阅读器和发生器

tes*_*nes 9 swift

目前在Objective-C中,我使用Zbar(http://zbar.sourceforge.net/)来生成和读取QR码.现在,我想继续开发Swift开发,是否有关于在Swift中生成和读取QR代码的"如何"或库?

小智 8

这是我写的用于在swift中生成QRcode的代码.

//MARK:- generate QR code
func generateQRImage(stringQR:NSString, withSizeRate rate:CGFloat) -> UIImage
{
    var filter:CIFilter = CIFilter(name:"CIQRCodeGenerator")
    filter.setDefaults()

    var data:NSData = stringQR.dataUsingEncoding(NSUTF8StringEncoding)!
    filter.setValue(data, forKey: "inputMessage")

    var outputImg:CIImage = filter.outputImage

    var context:CIContext = CIContext(options: nil)
    var cgimg:CGImageRef = context.createCGImage(outputImg, fromRect: outputImg.extent())

    var img:UIImage = UIImage(CGImage: cgimg, scale: 1.0, orientation: UIImageOrientation.Up)!

    var width  = img.size.width * rate
    var height = img.size.height * rate

    UIGraphicsBeginImageContext(CGSizeMake(width, height))
    var cgContxt:CGContextRef = UIGraphicsGetCurrentContext()
    CGContextSetInterpolationQuality(cgContxt, kCGInterpolationNone)
    img.drawInRect(CGRectMake(0, 0, width, height))
    img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return img
}
Run Code Online (Sandbox Code Playgroud)


Ron*_*ler 6

从iOS 7开始,iOS设备可以读取QR码.但是,没有内置的方法来生成QR码.这是一个快速而肮脏的QR码阅读器.

首先,import AVFoundation添加AVCaptureMetadataOutputObjectsDelegate

接下来,设置捕获会话:

func captureQRCode() {
    let session = AVCaptureSession()
    let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

    let input = AVCaptureDeviceInput.deviceInputWithDevice(device, error: nil) as AVCaptureDeviceInput
    session.addInput(input)

    let output = AVCaptureMetadataOutput()
    output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
    session.addOutput(output)
    output.metadataObjectTypes = [AVMetadataObjectTypeQRCode]

    let previewLayer = AVCaptureVideoPreviewLayer(session: session)
    let bounds = self.view.layer.bounds
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    previewLayer.bounds = bounds
    previewLayer.position = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds))

    self.view.layer.addSublayer(previewLayer)
    session.startRunning()
}
Run Code Online (Sandbox Code Playgroud)

最后,处理委托

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
    for item in metadataObjects {
        if let metadataObject = item as? AVMetadataMachineReadableCodeObject {
            if metadataObject.type == AVMetadataObjectTypeQRCode {
                println("QR Code: \(metadataObject.stringValue)")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)