You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用生成的Code128条码无法被AVCaptureSession扫描识别原因求解

问题原因

  • 核心原因:扫描配置的支持码型未包含你生成的条码类型
    你生成条码使用CICode128BarcodeGenerator生成的是Code128类型一维码,但在扫描会话的配置代码中,output.metadataObjectTypes仅配置了.qr(二维码)、.ean8、.ean13三种码型,系统扫描器不会识别不在支持列表内的Code128码,因此不会触发代理回调。你扫描谷歌搜到的条码可正常识别,是因为你搜到的条码属于已配置的EAN-13类型,在支持范围内。
  • 次要潜在问题:生成的条码未预留安静区
    Code128码的规范要求条码左右两侧需预留至少10个模块宽度的空白区域(安静区),你当前生成逻辑直接放大滤镜输出的图像使用,条码边缘无空白,可能导致部分扫描器无法识别条码起止位置。

解决方案

  1. 新增Code128码型到扫描支持列表
    修改setupSession方法中的码型配置行,添加.code128枚举值:
// 修改前
output.metadataObjectTypes = [.qr, .ean8, .ean13]
// 修改后
output.metadataObjectTypes = [.qr, .ean8, .ean13, .code128]
  1. 可选:优化条码生成逻辑,添加安静区
    生成条码时在四周预留空白区域,示例逻辑如下:
extension UIImage
    convenience init?(text: String?, codeType: CodeType) {
        let isQRCode = codeType.isQrcode
        let data = text?.data(using: isQRCode ? .utf8 : .ascii)
        let filter = CIFilter(name: isQRCode ? "CIQRCodeGenerator" : "CICode128BarcodeGenerator")
        filter?.setValue(data, forKey: "inputMessage")
        if isQRCode {
            filter?.setValue("Q", forKey: "inputCorrectionLevel")
        }
        guard let ciimage = filter?.outputImage else {
            return nil
        }
        // 放大条码
        let scaledImage = ciimage.transformed(by: CGAffineTransform(scaleX: 12, y: 12))
        // 非二维码添加20px的四周安静区
        if !isQRCode {
            let renderer = UIGraphicsImageRenderer(size: CGSize(width: scaledImage.extent.width + 40, height: scaledImage.extent.height + 40))
            let paddedImage = renderer.image { context in
                UIColor.white.setFill()
                context.fill(CGRect(origin: .zero, size: renderer.format.bounds.size))
                UIImage(ciImage: scaledImage).draw(at: CGPoint(x: 20, y: 20))
            }
            self.init(cgImage: paddedImage.cgImage!)
            return
        }
        self.init(ciImage: scaledImage)
    }

完成上述修改后即可正常识别应用生成的Code128条码。

内容的提问来源于stack exchange,提问作者kunass2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:06:03