クリックできる目次
はじめに
こんにちは🍃
iOSアプリ内でQRコードを生成する等の機能の利用部分は限られていますが、
文字列から簡単に作成したくなりましたので、書いてみたいと思います。
参考になれば幸いです。
今回は上のスクリーンショットのように文字列からQRコードの画像を作成します。
ソースコード
変数名などはご自由に変更してください🌾
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
extension UIImage { /** 文字列からQRコードを作成します - parameters: - text: 読み込んだ時のデータ文字列 */ static func makeQRCode(text: String) -> UIImage? { guard let data = text.data(using: .utf8) else { return nil } guard let QR = CIFilter(name: "CIQRCodeGenerator", parameters: ["inputMessage": data]) else { return nil } let transform = CGAffineTransform(scaleX: 10, y: 10) guard let ciImage = QR.outputImage?.transformed(by: transform) else { return nil } guard let cgImage = CIContext().createCGImage(ciImage, from: ciImage.extent) else { return nil } return UIImage(cgImage: cgImage) } } |
使い方
上記のExtension
をプロジェクトのどこかに配置し、サンプルとしてUIViewController
で呼び出してみます。 (今回はMainViewControrller
という名前で作成してみました)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import UIKit class MainViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() let urlText = "https://kikuragechan.com" let image = UIImage.makeQRCode(text: urlText) self.imageView.image = image } } |
QRコードをかざした時に読み込みたい文字列データを引数に渡します。
今回の例では、適当なUIImageView
を用意し、作成されたQRコードの画像をセットしています。
参考にさせていただいた記事
見て頂いてありがとうございます。
参考になる記事ありがとうございます。
extension UIImage {
convenience init?(qrCode: String) {
guard let data = qrCode.data(using: .utf8) else { return nil }
guard let qr = CIFilter(name: “CIQRCodeGenerator”, parameters: [“inputMessage”: data]) else { return nil }
let transform = CGAffineTransform(scaleX: 10, y: 10)
guard let ciImage = qr.outputImage?.transformed(by: transform) else { return nil }
guard let cgImage = CIContext().createCGImage(ciImage, from: ciImage.extent) else { return nil }
self.init(cgImage: cgImage)
}
}
こうすることでUIImage(qrCode: urlText)で初期化できるようになりました。