這就是我簡單地生成條形碼的方式:
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
}
self.init(ciImage: ciimage.transformed(by: CGAffineTransform(scaleX: 12, y: 12)))
}
一個示例用法是:
let image = UIImage(text: "hello stack overflow", type: .barcode)
輸出是:

現在我已經定義了這樣的掃描儀:
private let session = AVCaptureSession()
private let output = AVCaptureMetadataOutput()
func setupSession(with delegate: AVCaptureMetadataOutputObjectsDelegate) {
session.beginConfiguration()
guard let device = AVCaptureDevice.default(for: .video), let input = try? AVCaptureDeviceInput(device: device),
session.canAddInput(input), session.canAddOutput(output) else {
return
}
session.addInput(input)
session.addOutput(output)
session.commitConfiguration()
output.setMetadataObjectsDelegate(delegate, queue: queue)
output.metadataObjectTypes = [.qr, .ean8, .ean13]
}
我的代表如下:
func metadataOutput(
_: AVCaptureMetadataOutput,
didOutput metadataObjects: [AVMetadataObject],
from _: AVCaptureConnection
) {
print("*****")
print(metadataObjects.first)
}
當然這里沒有列印任何內容。為什么???
當我從谷歌掃描任何條碼時,例如:

那么輸出是正確的:
*****
Optional(<AVMetadataMachineReadableCodeObject: 0x280efece0, type="org.gs1.EAN-13", bounds={ 0.5,0.3 0.0x0.4 }>corners { 0.5,0.7 0.5,0.7 0.5,0.3 0.5,0.3 }, time 556773637541541, stringValue "1234567890128")
uj5u.com熱心網友回復:
在您的條碼上,您會生成一個 code-128 條碼,因此您也需要一個能夠讀取 code-128 的掃描儀。
您需要在要讀取的物件型別串列中添加 code128 :
output.metadataObjectTypes = [.qr, .ean8, .ean13, .code128]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372531.html
上一篇:如何使用委托從位于Tableview單元格內的Collectionview單元格導航到另一個ViewController?
