【问题标题】:Barcode Not Generating条码不生成
【发布时间】:2018-10-10 14:07:52
【问题描述】:

我正在使用link 中的以下代码从字符串生成 Code128 条形码。由于某种原因,它没有醒来。该函数确实返回了一个图像,但在将图像分配给UIImageView 后,我无法在模拟器中看到它。

 class Barcode {

    class func fromString(string : String) -> UIImage? {

        let data = string.data(using: .ascii)
        let filter = CIFilter(name: "CICode128BarcodeGenerator")
        filter?.setValue(data, forKey: "inputMessage")

        return UIImage(ciImage: (filter?.outputImage)!)
    }

}

已导入CoreImage。函数调用:

let barcodeImg = Barcode.fromString(string: number)
self.userBarcodeImageView.image = barcodeImg

谁能告诉我是什么问题?

已解决

替换了这个函数的代码,在这个link找到

func generateBarcode(from string: String) -> UIImage? {

let data = string.data(using: String.Encoding.ascii)

if let filter = CIFilter(name: "CICode128BarcodeGenerator") {
    filter.setDefaults()
    //Margin
    filter.setValue(7.00, forKey: "inputQuietSpace")
    filter.setValue(data, forKey: "inputMessage")
    //Scaling
    let transform = CGAffineTransform(scaleX: 3, y: 3)

    if let output = filter.outputImage?.applying(transform) {
        let context:CIContext = CIContext.init(options: nil)
        let cgImage:CGImage = context.createCGImage(output, from: output.extent)!
        let rawImage:UIImage = UIImage.init(cgImage: cgImage)

        //Refinement code to allow conversion to NSData or share UIImage. Code here:
        //http://stackoverflow.com/questions/2240395/uiimage-created-from-cgimageref-fails-with-uiimagepngrepresentation
        let cgimage: CGImage = (rawImage.cgImage)!
        let cropZone = CGRect(x: 0, y: 0, width: Int(rawImage.size.width), height: Int(rawImage.size.height))
        let cWidth: size_t  = size_t(cropZone.size.width)
        let cHeight: size_t  = size_t(cropZone.size.height)
        let bitsPerComponent: size_t = cgimage.bitsPerComponent
        //THE OPERATIONS ORDER COULD BE FLIPPED, ALTHOUGH, IT DOESN'T AFFECT THE RESULT
        let bytesPerRow = (cgimage.bytesPerRow) / (cgimage.width  * cWidth)

        let context2: CGContext = CGContext(data: nil, width: cWidth, height: cHeight, bitsPerComponent: bitsPerComponent, bytesPerRow: bytesPerRow, space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: cgimage.bitmapInfo.rawValue)!

        context2.draw(cgimage, in: cropZone)

        let result: CGImage  = context2.makeImage()!
        let finalImage = UIImage(cgImage: result)

        return finalImage

    }
}

return nil
}

让它工作。

【问题讨论】:

  • 通过设置任何背景颜色确保您的图像视图没有被隐藏或在前面。
  • UIImageView 背景颜色是默认的,它没有隐藏..
  • 尝试任何其他图像形式评估并检查它是否可见
  • 是的,它正确地从资产分配图像并且它是可见的。

标签: ios swift uiimage barcode cifilter


【解决方案1】:

我也遇到过同样的问题。经过长期研究找到以下解决方案。

请确保您的imageView 高度和宽度应为整数。如果imageView 高度和宽度是浮点数,则不会生成barcode 图像。

【讨论】:

  • UIImageView 的高度固定为 251x85,不是浮点数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多