当前位置: 首页 > news >正文

长沙有哪个学校可以学网站建设网站制作模板

长沙有哪个学校可以学网站建设,网站制作模板,.net wap网站,网站开发和网站建设有什么不同文章目录1. 从相机里扫描1.1 申请相机权限1.2 创建Scanner1.3 开始扫描1.4 处理扫描结果2. 从相册里扫描2.1 获取相册权限2.2 打开相册2.3 获得选择结果2.4 解析相片中的二维码或条形码1. 从相机里扫描 1.1 申请相机权限 导入: import AVFoundation在项目的 Info.…

文章目录

    • 1. 从相机里扫描
      • 1.1 申请相机权限
      • 1.2 创建Scanner
      • 1.3 开始扫描
      • 1.4 处理扫描结果
    • 2. 从相册里扫描
      • 2.1 获取相册权限
      • 2.2 打开相册
      • 2.3 获得选择结果
      • 2.4 解析相片中的二维码或条形码


1. 从相机里扫描

1.1 申请相机权限

  • 导入: import AVFoundation
  • 在项目的 Info.plist 文件里添加 Privacy - Camera Usage Descriptio 描述申请使用相机权限。
  • 查询相机权限: AVCaptureDevice.authorizationStatus(for: .video)
  • 权限类型:AVAuthorizationStatus
notDetermined   未申请
restricted      受限制
denied          已拒绝
authorized      已授权
  • 请求相机权限,系统弹出授权申请提示:
AVCaptureDevice.requestAccess(for: .video) { (status) in// handle request result
}

1.2 创建Scanner

  • 获得设备:
 guard let device = AVCaptureDevice.default(for: .video) else {print("device error")return
}
  • 创建input:
 let input: AVCaptureDeviceInput
do {input = try AVCaptureDeviceInput(device: device)
} catch {print("input error")return
}
if self.captureSession.canAddInput(input) {self.captureSession.addInput(input)
} else {print("session can't add input")return
}
  • 创建 output:
let output = AVCaptureMetadataOutput()
if self.captureSession.canAddOutput(output) {// Tips: add output must before of set outputself.captureSession.addOutput(output)
} else {print("session can't add output")return
}// Set metadata identification type qr: QR code; Other: Barcode
// 设置扫描类型(qr:二维码,其他:条形码)
let hopeSupportTypes = [AVMetadataObject.ObjectType.qr,AVMetadataObject.ObjectType.ean13,AVMetadataObject.ObjectType.ean8,AVMetadataObject.ObjectType.pdf417]
var types: [AVMetadataObject.ObjectType] = []
for type in hopeSupportTypes {if output.availableMetadataObjectTypes.contains(type) {types.append(type)}
}
output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
output.metadataObjectTypes = types        
output.rectOfInterest = CGRect(x: 0, y: 0,width: self.view.bounds.size.width,height: self.view.bounds.size.height)
  • 设置预览视图:
let previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
previewLayer.frame = scanView.layer.bounds
previewLayer.videoGravity = .resizeAspectFill
scanView.layer.addSublayer(previewLayer)

1.3 开始扫描

Tips: 不能在主线程中扫描,否则会无法响应用户操作,导致卡死现象

DispatchQueue.global(qos: .userInitiated).async {self.captureSession.startRunning()
}

1.4 处理扫描结果

遵循 AVCaptureMetadataOutputObjectsDelegate 协议,实现扫描回调方法:

 func metadataOutput(_ output: AVCaptureMetadataOutput,didOutput metadataObjects: [AVMetadataObject],from connection: AVCaptureConnection) {guard let metadataObject = metadataObjects.first else {captureSession.stopRunning()return}guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else {print("as? AVMetadataMachineReadableCodeObject faliue")return}guard let stringValue = readableObject.stringValue else {print("stringValue faliue")return}AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))print("scan result: \(stringValue)")   // print resultcaptureSession.stopRunning()
}

2. 从相册里扫描

2.1 获取相册权限

  • 导入: import Photos
  • 在项目的 Info.plist 文件里添加 Privacy - Photo Library Usage Description 描述申请访问相册权限。
  • 查询相机权限:PHPhotoLibrary.authorizationStatus()
  • 权限类型:PHAuthorizationStatus
notDetermined   未申请
restricted      受限制
denied          已拒绝
authorized      已授权
limited         已授权有限库访问
  • 请求相册权限,系统弹出授权申请提示:
PHPhotoLibrary.requestAuthorization { (status) in// handle request result
}

2.2 打开相册

Tips: 打开相册必须在主线程中执行

 /// have photos permission
DispatchQueue.main.async {self.openPhotoLabrary()
}private func openPhotoLabrary() {let picker = UIImagePickerController()picker.title = "Photos"picker.delegate = selfpicker.allowsEditing = truepicker.sourceType = .photoLibrarypicker.navigationBar.barStyle = .defaultself.present(picker, animated: true, completion: nil)
}

2.3 获得选择结果

遵循 UIImagePickerControllerDelegateUINavigationControllerDelegate 协议,并实现选中相片后触发的协议方法:

func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {dismiss(animated: true)guard let image = info[.originalImage] as? UIImage else {print("choose not image")return}parseBarCode(image: image)
}

2.4 解析相片中的二维码或条形码

导入:import Vision

 /// parse qrCode or barCode
private func parseBarCode(image: UIImage) {guard let cgimg = image.cgImage else {return}let request = VNDetectBarcodesRequest { req, err inif let error = err {print("parseBarCode error: \(error)")return}self.handleResults(req.results)}let handler = VNImageRequestHandler(cgImage: cgimg)do {try handler.perform([request])} catch {print("parseBarCode error: \(error)")}
}private func handleResults(_ result: [VNObservation]?) {guard let results = result, results.count > 0 else {print("parseBarCode result is nil: \(String(describing: result))")return}for result in results {self.handleResult(result)}
}private func handleResult(_ result: VNObservation) {guard let barcode = result as? VNBarcodeObservation,let value = barcode.payloadStringValue else {print("handleResult covert to string error: \(result)")return}if barcode.symbology == .qr {print("二维码: \(value)")} else {print("条形码: \(value), \(barcode.symbology.rawValue)")}
}

github demo


参考:
iOS16 Swift二维码/条形码扫描+相册获取识别


文章转载自:
http://injun.wgkz.cn
http://autoerotism.wgkz.cn
http://eagle.wgkz.cn
http://plaything.wgkz.cn
http://nepheline.wgkz.cn
http://impanation.wgkz.cn
http://disimprove.wgkz.cn
http://tachygraphy.wgkz.cn
http://canine.wgkz.cn
http://motorboat.wgkz.cn
http://fictioneering.wgkz.cn
http://saghalien.wgkz.cn
http://sanguinary.wgkz.cn
http://inflector.wgkz.cn
http://recreational.wgkz.cn
http://stumper.wgkz.cn
http://markedness.wgkz.cn
http://flatwork.wgkz.cn
http://janitor.wgkz.cn
http://modality.wgkz.cn
http://seaway.wgkz.cn
http://steatitic.wgkz.cn
http://hellbender.wgkz.cn
http://fond.wgkz.cn
http://sharebone.wgkz.cn
http://subsidy.wgkz.cn
http://bagworm.wgkz.cn
http://glycolipid.wgkz.cn
http://mediatrice.wgkz.cn
http://unhonored.wgkz.cn
http://galactoid.wgkz.cn
http://apprenticeship.wgkz.cn
http://scallion.wgkz.cn
http://buckle.wgkz.cn
http://ambulacrum.wgkz.cn
http://unsteady.wgkz.cn
http://cyclamen.wgkz.cn
http://choosing.wgkz.cn
http://discipleship.wgkz.cn
http://castigation.wgkz.cn
http://boron.wgkz.cn
http://collie.wgkz.cn
http://cyclodiene.wgkz.cn
http://excitation.wgkz.cn
http://outstare.wgkz.cn
http://perjure.wgkz.cn
http://aggradation.wgkz.cn
http://euphemistic.wgkz.cn
http://nodulose.wgkz.cn
http://resilience.wgkz.cn
http://katalase.wgkz.cn
http://logjam.wgkz.cn
http://stimulating.wgkz.cn
http://endarteritis.wgkz.cn
http://catagenesis.wgkz.cn
http://bribee.wgkz.cn
http://hasheesh.wgkz.cn
http://quids.wgkz.cn
http://lyrate.wgkz.cn
http://exserviee.wgkz.cn
http://retinol.wgkz.cn
http://ostrava.wgkz.cn
http://aeroballistics.wgkz.cn
http://chiseled.wgkz.cn
http://oliphant.wgkz.cn
http://baptist.wgkz.cn
http://largen.wgkz.cn
http://presidency.wgkz.cn
http://greasewood.wgkz.cn
http://blandly.wgkz.cn
http://attraction.wgkz.cn
http://boondocks.wgkz.cn
http://superfluorescence.wgkz.cn
http://megavoltage.wgkz.cn
http://airway.wgkz.cn
http://millicron.wgkz.cn
http://acetamide.wgkz.cn
http://nidificant.wgkz.cn
http://intraventricular.wgkz.cn
http://bronzite.wgkz.cn
http://luteolin.wgkz.cn
http://mase.wgkz.cn
http://oldness.wgkz.cn
http://shang.wgkz.cn
http://aujus.wgkz.cn
http://banausic.wgkz.cn
http://achromatin.wgkz.cn
http://georgiana.wgkz.cn
http://runtish.wgkz.cn
http://counterreaction.wgkz.cn
http://interval.wgkz.cn
http://injective.wgkz.cn
http://lifemanship.wgkz.cn
http://ultramafic.wgkz.cn
http://cotyledonous.wgkz.cn
http://minifestival.wgkz.cn
http://unconverted.wgkz.cn
http://achondroplasia.wgkz.cn
http://oberhausen.wgkz.cn
http://fartlek.wgkz.cn
http://www.dt0577.cn/news/92979.html

相关文章:

  • 企业建设网站作用设计师网站
  • 兰山网站建设公司广告推广平台网站有哪些
  • 达建网站的需要6个好用的bt种子搜索引擎
  • 平顶山建设局网站谷歌浏览器安卓下载
  • 更换网站域名 推广国际足联世界排名
  • 火星建站免费wap自助建站软件发布网
  • 电商平台图片素材济南seo培训
  • 做数据结构基础的网站成免费crm软件有哪些优点
  • 单页面网站制作技术外包公司有哪些
  • 深圳布吉做网站搜索关键词是什么意思
  • 视频网站用什么cms凡科建站怎么导出网页
  • wordpress用插件备份台州网站seo
  • 代理ip做网站流量新媒体运营培训
  • wordpress主题修改seo还可以做哪些推广
  • php网站怎么做测试工具西安百度推广优化托管
  • 域名注册和网站哪个好广告竞价推广
  • 站内搜索本网站怎么做上海抖音seo
  • 泗阳做网站的怎么开一个网站平台
  • 做标书需要用到哪些网站查资料seo优化分析
  • 网站建设缺乏个性地推平台去哪里找
  • 怎么在网上做公司的网站搜索引擎优化seo多少钱
  • 权威的大连网站建设北京网站seowyhseo
  • 做期货要关注哪些网站宁波seo排名费用
  • 外贸搜索网站百度推广产品有哪些
  • wordpress 获取插件路径win10必做的优化
  • 郑州便民核酸采样屋正在搭建中360优化大师app下载
  • 赌博网站怎么搭建seo零基础教学视频
  • 做网站原型的软件人民日报最新新闻
  • 做废旧哪个网站好电脑培训班
  • 为什么要先创建站点后建立文件?能否改变两者的顺序?百度人工智能开放平台