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

西安志成网站建设公司建筑公司网站管理员

西安志成网站建设公司,建筑公司网站管理员,红酒网站定位,seo是什么品牌文章目录1. 从相机里扫描1.1 申请相机权限1.2 创建Scanner1.3 开始扫描1.4 处理扫描结果2. 从相册里扫描2.1 获取相册权限2.2 打开相册2.3 获得选择结果2.4 解析相片中的二维码或条形码1. 从相机里扫描 1.1 申请相机权限 导入#xff1a; import AVFoundation在项目的 Info.… 文章目录1. 从相机里扫描1.1 申请相机权限1.2 创建Scanner1.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 cant 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 cant 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 Photospicker.delegate selfpicker.allowsEditing truepicker.sourceType .photoLibrarypicker.navigationBar.barStyle .defaultself.present(picker, animated: true, completion: nil) }2.3 获得选择结果 遵循 UIImagePickerControllerDelegate 和 UINavigationControllerDelegate 协议并实现选中相片后触发的协议方法 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://www.hkea.cn/news/14260233/

相关文章:

  • 门户网站建设 考核温州做网站优化
  • 互动网站欣赏做外贸卖小商品是哪个网站
  • 东莞住房和城乡建设厅网站做百度手机网站点击
  • 展示网站开发软件开发详细流程
  • asp做网站的缺点湖南建筑人才网招聘
  • 自己用自己电脑做网站空间知乎 网站建设
  • 淘宝网站icp备案wordpress仿36kr主题
  • 学校官方网站个人信用信息服务平台
  • 网站建设付款页面WordPress导入hexo
  • 在建设局网站上怎么样总监解锁杭州网络营销推广公司
  • 怎么做黑客攻击网站网站域名收费
  • o2o平台网站建设wordpress前端验证
  • 建筑工程 技术支持 东莞网站建设360建筑网证书估价
  • 做网站需要多少深圳微信商城网站设计费用
  • 响应式建站网站网站建设 标书
  • 本公司经营网站建设商标注册号在哪个位置
  • 株洲企业网站建设工作合肥建设工程竣工结算备案网站
  • 免费网站转app网络广告营销环境发生了哪些变化
  • 做网站的书籍为什么网页不能打开建设银行网站
  • 网站自然优化php做网站代码
  • 怎样用ps做网站wordpress门户网站模板下载
  • 买网站服务器生物公司网站建设方案
  • 微信端网站开发流程图o2o与网站建设
  • 自己电脑做网站 外网无法访问灵台县门户网站
  • 中国十大网站域名万网主体新增网站备案需要是滴么
  • 有关毕业设计的网站企业网站建设公司怎么做
  • 诸城做网站公司网站不用备案
  • 做职业背景调查的网站wordpress 导航高亮
  • ...无锡网站制作全国建筑网站
  • 为什么要用国外服务器做网站泉州做网站开发公司