Swift 之二维码的生成与识别

本文详细介绍了如何在iOS应用中实现二维码的生成与识别。首先,通过Core Image框架生成二维码,然后利用AVFoundation框架进行二维码识别,包括调用相机实时扫描和从相册选取图片识别。此外,还提到了识别复杂内容二维码时可能出现的问题及解决方案,即调整二维码图片大小以提高识别成功率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、二维码的生成

  • 参考资料:https://www.jianshu.com/p/a112ff14387f
let filter = CIFilter.init(name: "CIQRCodeGenerator")
filter?.setDefaults()
/// 链接转换
let data = qrUrl.data(using: .utf8)
filter?.setValue(data, forKeyPath: "inputMessage")
let outputImage = filter?.outputImage
/// 展示
if let outputImage = outputImage {
   
  qrCodeView.image = createUIImageFromCIImage(image: outputImage, size: 100)

func createUIImageFromCIImage(image: CIImage, size: CGFloat) -> UIImage {
   
  let extent = image.extent.integral
  let scale = min(size / extent.width, size / extent.height)
  
  /// Create bitmap
  let width = size_t(extent.width * scale)
  let height = size_t(extent.height * scale)
  let cs: CGColorSpace = CGColorSpaceCreateDeviceGray()
  let bitmap = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: cs, bitmapInfo: 1)
  
  let context = CIContext.init()
  let bitmapImage = context.createCGImage(image, from: extent)
  if let bitmap = bitmap, let bitmapImage = bitmapImage {
   
    bitmap.interpolationQuality = .none
    bitmap.scaleBy(x: scale, y: scale)
    bitmap.draw(bitmapImage, in: extent)
    if let scaledImage = bitmap.makeImage() {
   
      return UIImage.init(cgImage: scaledImage)
    }
  }
  return UIImage()
}

2、二维码的识别

  • 调用相机识别二维码
  • 从相册中选取图片识别二维码
  • 参考资料:
    https://blog.csdn.net/leafgw/article/details/51096568
    https://blog.csdn.net/qq_39097425/article/details/88985484
import Foundation
import UIKit
import AVFoundation

class ScanQrCodeViewController: UIViewController {
   
  private var session: AVCaptureSession?
  private let scanLine = UIImageView()
  private let screenWidth =<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值