적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

[Swift iOS] Barcode Generator in all types (QR, EAN8, EAN13 ...)

hongssup_ 2021. 10. 1. 14:24
반응형

바코드 스캐너는 많아도 생성기는 검색해봐도 많지 않았다.. 

거의다 QR 생성기이고 그중에서도 내가 필요한 EAN8 바코드 생성기는 찾기 쉽지 않더라. 내가 검색을 잘못한건지 모르겠지만 ㅎㅎ

그나마 찾은 괜찮은 iOS용 라이브러리도 Objective-C로만 되어있어서 대체 어떻게 사용해야할지 막막하던 'BarCodeKit'

 

그러다 한줄기 빛처럼 만나게 된 라이브러리 'RSBarcodes_Swift'

내가 찾던 ean8을 포함한 1D / 2D barcode 타입들을 전부 지원해주는 Swift 라이브러리이다. 

애초에 그냥 바로 Cocoapods에서 'barcode' 라고 검색했으면 빨리 찾았을 수도 있겠지만

구글에서 swift ean8 generator 라고 검색하니 저어엉말 찾기가 힘들었다ㅠ 

나는 1D barcode가 뭔지도 몰랐기에 한번 참고용으로 바코드 타입에 대해 검색해보았다.

 

Barcode types

▶ One-Dimensional (1D) Barcode Types 

: 1차원 바코드 유형. 일반적으로 선형 바코드라고 불리며 UPC 및 EAN 코드와 같이 가장 전통적이고 잘 알려진 바코드 유형이 포함된다. 

▶ Two-Dimensional (2D) Barcode Types

: 2차원 기호와 모향을 사용하여 데이터를 체계적으로 나타내는 2차원 바코드 유형. 1D 바코드에 비해 단위 면적당 더 많은 데이터를 나타낼 수 있으며, 찢어지거나 긁히거나 손상된 후에도 데이터를 스캔 가능하게 유지 되도록 설계되었다. QR 코드 및 PDF417과 같은 일부 최신 바코드 유형이 포함된다.  

* 참고 : Types of Barcodes

 

RSBarcodes_Swift 사용법

RSBarcodes_Swift는 위의 1D / 2D 바코드 타입 스캔과 생성을 모두 지원해주는 아주 고오마운 Swift 라이브러리다. 감사흡느드ㅠㅠ 

라이브러리 설명이나 샘플 코드가 잘 되어있어서 쉽게 사용할 수 있었다 :) 

 

먼저 podfile에 다음을 추가해준 후 pod install 해준다. 

pod 'RSBarcodes_Swift', '~> 5.1.1'

Swift 파일에서 다음을 import 해준 다음

import AVFoundation
import RSBarcodes_Swift

아래와 같이 바코드를 생성해줄 수 있다. 

let barcodeView = UIImageView()
barcodeView.image = generateBarcode(from: "00000000")
barcodeView.frame = CGRect(x: 0, y: 0, width: 180, height: 100)
view.addSubview(barcodeView)

func generateBarcode(from string: String) -> UIImage? {
    let gen = RSUnifiedCodeGenerator.shared
    gen.fillColor = UIColor.white
    gen.strokeColor = UIColor.black
    if let image = gen.generateCode(string, machineReadableCodeObjectType: AVMetadataObject.ObjectType.ean8.rawValue) {
        return RSAbstractCodeGenerator.resizeImage(image, scale: 1)
    }
}

 

 

사용하고있던 EAN13도 이걸로 바꿀까 했는데 바코드가 엄청 진하게? 굵게 나와서 EAN13은 그냥 전에 사용하던 EAN13 생성기를 그대로 따로 사용해주기로 했다. 바코드 굵기 조절은 힘들겠쥬..? ㅎㅎ 

* EAN13 바코드 생성은 다음을 참고 -> create barcode from string  

728x90
반응형