iOS/AndroidアプリでCode128のバーコードを生成する必要がでてきました。iOS 8.0くらいから標準APIだけで二次元コードの読み取りと生成ができるようになっていたようです。
昔からバーコード生成といえばZXingみたいなところがありましたよね。遡って調べてみると僕は7年くらい前からバーコードの読み取りと生成を繰り返してきたようです。
- Xamarin.FormsでZXingを使ってQRコード/バーコードを生成する - 酢ろぐ!
- Windows PhoneでZXing Barcode Scanning Libraryを使ってバーコードを読み込む(Windows Phone OS 7.1 ~) - 酢ろぐ!
- Windows PhoneでWindows Phone 7 Silverlight ZXing Barcode Scanning Libraryを使ってバーコードを読み込む(Windows Phone OS 7.0) - 酢ろぐ!
- iOSでZBarSDKを使ってバーコードの読み込みをおこなう - 酢ろぐ!
今回の内容はAppleのドキュメントに記載されています。
バーコードの生成する
特に難しいことはしないのでサンプルコードをそのまま貼ります。
import Foundation import UIKit import CoreImage static func generateCode128Barcode(string: String) -> UIImage? { guard let data = string.data(using: .utf8) else { return nil } guard let filter = CIFilter(name: "CICode128BarcodeGenerator") else { return nil } filter.setDefaults() filter.setValue(data, forKey: "inputMessage") guard let output = filter.outputImage else { return nil } let context = CIContext(options: nil) guard let cgImage = context.createCGImage(output, from: output.extent) else { return nil } let image = UIImage(cgImage: cgImage, scale: 2.0, orientation: UIImageOrientation.up) return image }
生成結果
下図のように表示されます。
CIFilter(name: "CICode128BarcodeGenerator")
の部分をCIQRCodeGenerator
に変えることでQRコードも生成することができます。
ポケモンでは色々なQRコードを読み取る「島スキャン」というミニゲームがあって、毎回異なるQRコードを読む必要があります。このAPIを使って無限にランダムなQRコードを生成することで楽に島スキャンすることができそうです。