技術ブログ

プログラミング、IT関連の記事中心

QRコードの生成【Swift】

◾️はじめに

チャットアプリのフレンド登録など、様々な場面でQRコードを利用したい事があります。

QRコードを読み取り、取得した文字列に応じて処理を行う方法
QRコードを読み取り、取得したURLへアクセスしてAPIを実行する方法

上記の方法を想定してそれぞれ(文字列、URL)のQRコード生成を記載します。

◾️文字列からQRコードを生成する

QRコードを読み取り、取得した文字列に応じて処理を行う方法」
を想定して、文字列からQRコードを生成する方法を記載します。

以下がその方法です。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // 文字列をNSDataに変換
        let str = "変換する文字列"
        let data = str.data(using: String.Encoding.utf8)!

        // QRコード生成
        let qr = CIFilter(name: "CIQRCodeGenerator", withInputParameters: ["inputMessage": data, "inputCorrectionLevel": "M"])!
        let sizeTransform = CGAffineTransform(scaleX: 10, y: 10)
        let qrImage = qr.outputImage!.transformed(by: sizeTransform)
        let context = CIContext()
        let cgImage = context.createCGImage(qrImage, from: qrImage.extent)
        let uiImage = UIImage(cgImage: cgImage!)

        // 作成したQRコードを表示
        let qrImageView = UIImageView()
        qrImageView.contentMode = .scaleAspectFit
        qrImageView.frame = self.view.frame
        qrImageView.image = uiImage
        self.view.addSubview(qrImageView)
    }
}

◾️URLからQRコードを生成する

QRコードを読み取り、取得したURLへアクセスしてAPIを実行する方法」
を想定して、URLからQRコードを生成する方法を記載します。

以下がその方法です。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // URLをNSDataに変換
        let url = "https://www.google.co.jp/"
        let data = url.data(using: String.Encoding.utf8)!

        // QRコード生成
        let qr = CIFilter(name: "CIQRCodeGenerator", withInputParameters: ["inputMessage": data, "inputCorrectionLevel": "M"])!
        let sizeTransform = CGAffineTransform(scaleX: 10, y: 10)
        let qrImage = qr.outputImage!.transformed(by: sizeTransform)
        let context = CIContext()
        let cgImage = context.createCGImage(qrImage, from: qrImage.extent)
        let uiImage = UIImage(cgImage: cgImage!)

        // 作成したQRコードを表示
        let qrImageView = UIImageView()
        qrImageView.contentMode = .scaleAspectFit
        qrImageView.frame = self.view.frame
        qrImageView.image = uiImage
        self.view.addSubview(qrImageView)
    }
}