iosswiftbarcodecore-image

How can I generate a barcode from a string in Swift?


I am a new iOS developer. I was wondering how can I generate a barcode in Swift.

I have the code already, there are multiple resources from where to learn how to read a barcode, but I didn't find any that talks about generating one from a string.

Thanks a lot!

P.S. I know there is a similar question about this, but it's for Objective-C. I don't know Obj-C and I find it difficult coming from .NET.


Solution

  • You could use a CoreImage (import CoreImage) filter to do that!

        class Barcode {
            class func fromString(string : String) -> UIImage? {
                 let data = string.data(using: .ascii)
                 if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
                      filter.setValue(data, forKey: "inputMessage")
                      if let outputCIImage = filter.outputImage {
                           return UIImage(ciImage: outputCIImage)
                      }
                 }
                 return nil
            }
        }
    
        let img = Barcode.fromString("whateva")
    

    A newer version, with guard and failable initialiser:

    extension UIImage {
    
        convenience init?(barcode: String) {
            let data = barcode.data(using: .ascii)
            guard let filter = CIFilter(name: "CICode128BarcodeGenerator") else {
                return nil
            }
            filter.setValue(data, forKey: "inputMessage")
            guard let ciImage = filter.outputImage else {
                return nil
            }
            self.init(ciImage: ciImage)
        }
    
    }
    

    Usage:

    let barcode = UIImage(barcode: "some text") // yields UIImage?
    

    According to the docs :

    Generates an output image representing the input data according to the ISO/IEC 15417:2007 standard. The width of each module (vertical line) of the barcode in the output image is one pixel. The height of the barcode is 32 pixels. To create a barcode from a string or URL, convert it to an NSData object using the NSASCIIStringEncoding string encoding.