■ 概要
本記事では、
ロゴ入り、色変更などを施したカスタマイズQRコードを生成するライブラリ
について紹介します。
■ ライブラリ
今回使用するライブラリはこちら。
・QRコードの生成機能
・QRコードのデザインのカスタマイズ機能
・QRコードの読み取り機能
などQRコードに関連する機能が
シンプルかつ簡単に利用できるドロップイン・コンポーネントとして提供されています。
(SwiftとObjective-cの両方で使用できるみたいです。)
↓
ライブラリの機能や仕様、導入手順については
「README.md」に詳細に記載されています。
今回はその内容を掻い摘んで紹介したいと思います。
■ 環境
Xcodeバージョン : 15.3
■ アウトプット
まずはアウトプットから。
今回はこんな感じでQRコードをカスタマイズしてみました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2F56d47495-f561-fff6-4701-cb6c5258ee42.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dd025f79801efb68c3ec5ed4773a4e52)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2F35735b04-41cd-0bde-4654-f5f357fcc125.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=536176718a5d3ccd7e7a785cb9b2a08d)
カスタマイズのポイントとしては、それぞれの要素のカラーを
同系色はなるべく避けるように = コントラストを意識してデザインする
と検出されやすいQRコードを作成することができます。
■ インストール
「Swift Package Manager」 または、「Cocoapods」
を使用してライブラリをインストールします。
① Swift Package Manager
.package(url: "https://github.com/dagronf/qrcode.git", from: "18.0.0")
② Cocoapods
pod 'DSF_QRCode', '~> 19.0.0'
■ 実装
1. QRコードの生成 (最小実装)
まずソースコード内でimport QRCode
を記述し、ライブラリをインポートします。
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
そしてとりあえずこの2行で、標準の白黒のQRコードが生成されます。
「WebサイトのURL」や「文字列」の情報をもとに、
サイズを指定してQRコードを生成しています。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2Fbaad040b-cde6-dea8-3540-c13b67f01b1d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=789a235b27b41e46999819baf05beeea)
2. QRコードの設定
① QRコードのフチの幅を変更
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
doc.design.additionalQuietZonePixels = 3
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
② QRコードを角丸に変更
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
doc.design.style.backgroundFractionalCornerRadius = 3.0
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2F538f138d-770b-85c3-5638-3ddb8af5feae.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7a1d8863d66234ca653f6a6814d625c9)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2F2a729bc6-921d-4a74-c9b5-e7a1d1107383.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a2d2a01660d5a47cc192d22e694aee55)
③ 誤り訂正レベルの指定
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
doc.errorCorrection = .high
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
誤り訂正レベルを4段階で設定可能です。(↓こちらを参照)
特に画像の挿入などで、QRコードの隠れる部分が多くなる場合は
一番上の「レベルH」を設定することが望ましい。
3. 画像(ロゴなど)の挿入
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
let logoImage = // 画像(ロゴなど)のCGImage
let logoMaskImage = // マスクのCGImage
doc.logoTemplate = QRCode.LogoTemplate(image: logoImage, maskImage: logoMaskImage)
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
QRコードに画像(ロゴなど)を挿入することができます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2F08217fa7-6f17-8e3f-990a-346214a6b74f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=391ada4886c6c6442240f41ccf875461)
↓を参照。画像素材とマスク素材を使用し、QRコードに画像を挿入します。
(マスク素材を指定しない場合は、画像素材のアルファ値をもとに生成され使用される。)
また、↓のように位置を指定して画像を挿入することも可能です。
4. 背景色の設定
// カスタマイズ箇所が分かりやすいように、「赤」「緑」「青」の3種類のカラーを用意。
let redColor = CGColor(srgbRed: 236.0/255.0, green: 107.0/255.0, blue: 68.0/255.0, alpha: 1.0)
let greenColor = CGColor(srgbRed: 42.0/255.0, green: 178.0/255.0, blue: 112.0/255.0, alpha: 1.0)
let blueColor = CGColor(srgbRed: 88.0/255.0, green: 151.0/255.0, blue: 208.0/255.0, alpha: 1.0)
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
doc.design.backgroundColor(redColor)
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
QRコードの背景色が変更されます。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2Fd32ed725-49a8-7d1c-bc5a-7dc9184c1231.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8f275be46a702fde6b1f6f49e52c1f5b)
5. 切り出しシンボル
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
doc.design.shape.eye = QRCode.EyeShape.RoundedOuter()
doc.design.style.eye = QRCode.FillStyle.Solid(redColor)
doc.design.style.eyeBackground = greenColor
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
QRコードの隅にある、目のような四角のデザインを変更できます。
①形状
②色
③背景色
の変更が可能です。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2Fa34b8f71-6ca7-d223-9a86-ebcb10bbdb83.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d6c5671331fd761969401f9ab7b1c097)
「形状」の種類は、↓を参照してください。
また、中心部分も個別で「形状」と「色」が変更可能です。
doc.design.shape.pupil = QRCode.PupilShape.Circle()
doc.design.style.pupil = QRCode.FillStyle.Solid(blueColor)
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2F3a771741-06a8-e584-4f6e-5772c240acab.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=967e13e306bdb0b7ac660612c262c4b0)
「形状」の種類は、↓を参照してください。
6. ピクセル (ドット部分)
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
doc.design.shape.onPixels = QRCode.PixelShape.Star()
doc.design.style.onPixels = QRCode.FillStyle.Solid(redColor)
doc.design.style.onPixelsBackground = greenColor
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
QRコードのピクセルのドット部分のデザインを変更できます。
①形状
②色、
③背景色
の変更が可能です。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2F2a8f714d-fb75-1961-9e0a-b31b20461a1c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d32f6b0701f2642fb616864432a2be89)
「形状」の種類は、↓を参照してください。
7. ピクセル (ドット以外の部分)
let doc = QRCode.Document(utf8String: "https://generosity.co.jp/")
doc.design.shape.offPixels = QRCode.PixelShape.Star()
doc.design.style.offPixels = QRCode.FillStyle.Solid(redColor)
doc.design.style.offPixelsBackground = greenColor
let cgImage = doc.cgImage(CGSize(width: 1000, height: 1000))
QRコードのピクセルの、ドットが描画されていない部分のデザインを変更できます。
①形状
②色、
③背景色
の変更が可能です。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2730387%2Fee48f7d8-ef01-4e40-6274-05da8ac2bc8f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a17b85f616f08359c57540ba481d414f)
■ 最後に (感想)
今回はカスタマイズできる「変更可能な箇所」にフォーカスして、
掻い摘んで紹介させてもらいました。
デザインの形状の種類も多いですし、他にもカラーにグラデーションをかけたり、
要素に画像を設定できたりなど、カスタマイズ性がかなり高いので使っていて面白いし
実用性も高いと感じました。
最後まで読んでいただきありがとうございました。