見出し画像

AppStorageデータを利用して作るバーコード生成のコード

今回は、アプリ内で各ユーザー固有のバーコードを生成したいので、AppStorageに格納した情報をもとに、バーコードを作るfunctionを作ってみた。
ほぼコピペで作ってるので、コードについてコメントできる内容は、ほとんどない。
ただ、Paul Hudsonのバーコード生成コードをコピペしてみたけど、うまく表示されなかった。最後のアウトプットのところが怪しい。
ちなみに下記がそのコード。

func generateBarcode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)

        if let output = filter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output)
        }
    }

    return nil
}
let image = generateBarcode(from: "Hacking with Swift")

上記のコードでうまくバーコード出力できなかったので、下記のでやってみたら成功。ちなみに似たようなコードでQRコードの生成も可能。今回は、Barcode.

func generateBarcode(from string: String) -> UIImage? {
      
        let context = CIContext()
        let filter2 = CIFilter.code128BarcodeGenerator()
          
        filter2.message = Data(string.utf8)
        
        if let outputImage = filter2.outputImage {
            if let cgimg = context.createCGImage(outputImage, from: outputImage.extent) {
                return UIImage(cgImage: cgimg)
            }
        }
        
        return UIImage(systemName: "xmark.circle") ?? UIImage()
    }

下記をインポートするのも忘れずに。

import CoreImage
import CoreImage.CIFilterBuiltins

そして、もともとAppStorageに格納してある必要な数字情報を、呼び込む。

    @State var savedpayid: String = UserDefaults.standard.string(forKey: "payid") ?? "0"

最後に、View内にアウトプットさせる。

Image(uiImage: generateBarcode(from: "\(savedpayid)")!)

最後のところのびっくりマーク「!」については、使わないほうが良いみたいだが、今回のところは、savedpayidが必ずあることを信じて使用。というか他の方法がよくわからないのもある。

一つずつのコードの意味や使い方をある程度しっかり理解して進んでいかないと、後で修正とかの場合、?となっちゃうので、基礎を学ぶ必要もある。気持ちは、早く結果を見たいのだが、集中、忍耐して、学んでいこう。

Reference:https://www.hackingwithswift.com/example-code/media/how-to-create-a-barcode


この記事が気に入ったらサポートをしてみませんか?