LoginSignup
20
16

More than 3 years have passed since last update.

【Swift】QRコードを読み取って文字列を取得する

Last updated at Posted at 2020-05-23

簡単に実装したサンプルです。参考になると幸いです。
asa08/QRreader

カメラを設定する

import AVFoundationして、AVCaptureSessionをインスタンスを生成します。

private let session = AVCaptureSession()

次に、カメラの設定を行います。

// カメラの設定
// 今回は背面カメラなのでposition: .back
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .back)

let devices = discoverySession.devices
if let backCamera = devices.first {
   do {
      // カメラでQRの読み取りに成功した時の処理
      let deviceInput = try AVCaptureDeviceInput(device: backCamera)
      doInit(deviceInput: deviceInput)
   } catch {
      print("Error occured while creating video device input: \(error)")
   }
}

doInit()の中でデコードを行います。

private func doInit(deviceInput: AVCaptureDeviceInput) {
    if !session.canAddInput(deviceInput) { return }
    session.addInput(deviceInput)
    let metadataOutput = AVCaptureMetadataOutput()
        
    if !session.canAddOutput(metadataOutput) { return }
    session.addOutput(metadataOutput)
        
    metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
    metadataOutput.metadataObjectTypes = [.qr]
    
    // カメラを起動
    let previewLayer = AVCaptureVideoPreviewLayer(session: session)
    previewLayer.frame = view.bounds
    previewLayer.videoGravity = .resizeAspectFill
    caputureView.layer.addSublayer(previewLayer)
        
    session.startRunning()
}

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
        
   for metadata in metadataObjects as! [AVMetadataMachineReadableCodeObject] {
       // QRのtype: metadata.type
       // QRの中身: metadata.stringValue
       guard let value = metadata.stringValue else { return }
            
       session.stopRunning()
       textLavel.text = value
       caputureView.isHidden = true
   }
}

これでカメラで読み取ったQRから文字列を取得することができます。

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16