iOS 自带二维码识别(识别二维码,条形码以及从相册中选择图片进行识别)
一:初始化
//扫描区域
UIImage *hbImage=[UIImage imageNamed:@"pick_bg"];
UIImageView * scanZomeBack=[[UIImageView alloc] init];
scanZomeBack.backgroundColor = [UIColor clearColor];
scanZomeBack.image = hbImage;
//添加一个背景图片
CGRect mImagerect = CGRectMake(20*HEIGHT_FACTOR, (HEIGHT-280*HEIGHT_FACTOR)/2, 280*HEIGHT_FACTOR, 280*HEIGHT_FACTOR);
[scanZomeBack setFrame:mImagerect];
CGRect scanCrop=[self getScanCrop:mImagerect readerViewBounds:self.frame];
[self addSubview:scanZomeBack];
//获取摄像设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//创建输出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//设置代理 在主线程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
output.rectOfInterest = scanCrop;//a CGRect that determines the receiver's rectangle of interest for each frame of video.
//初始化链接对象
session = [[AVCaptureSession alloc]init];
//高质量采集率
[session setSessionPreset:AVCaptureSessionPresetHigh];
if (input) {
[session addInput:input];
}
if (output) {
[session addOutput:output];
//设置扫码支持的编码格式(如下设置条形码和二维码兼容)
NSMutableArray *a = [[NSMutableArray alloc] init];
if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeQRCode]) {
[a addObject:AVMetadataObjectTypeQRCode];
}
if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeEAN13Code]) {
[a addObject:AVMetadataObjectTypeEAN13Code];
}
if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeEAN8Code]) {
[a addObject:AVMetadataObjectTypeEAN8Code];
}
if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeCode128Code]) {
[a addObject:AVMetadataObjectTypeCode128Code];
}
output.metadataObjectTypes=a;
}
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.layer.bounds;
[self.layer insertSublayer:layer atIndex:0];
//开始捕获
[session startRunning];
二:在回调方法中识别扫描结果
#pragma mark - 扫描结果
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
if (metadataObjects && metadataObjects.count>0) {
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
//输出扫描字符串
if (_delegate && [_delegate respondsToSelector:@selector(readerScanResult:)]) {
[_delegate readerScanResult:metadataObject.stringValue];
}
}
}
三:源码下载链接:
http://download.csdn.net/detail/luco2008/9497923
iOS 自带二维码识别(识别二维码,条形码以及从相册中选择图片进行识别)相关推荐
- 小米8手机相册中的图片怎么识别文字?
小米8大家都买了吗?最近新出的还是很好的,小米8手机相册中的图片怎么识别?对于用小米手机的人来说很简单,下面分享一个方法. 1在手机上输入PDF阅读器,然后开始识别相册图片的文字 2打开就是这样的界面 ...
- Android 拍照以及相册中选择(适配高版本)————上传多张照片之压缩处理、在线预览可伸缩放大(二)
______ Introduction ______ 前言 上一篇文章刚给大家总结完,关于上传头像的功能.此文章所述 主要是关于上传头像的具体流程以及如何对照片做裁剪处理,回调给控件显示:当然重中之重 ...
- 调用Android系统自带相机拍照,从相册中获取图片
一,前言: 在日常的手机应用开发过程中,经常会遇到上传图片的需求,像上传头像之类的,这就需要调用系统的相机,相册获取照片.但是在Android 系统7.0之后认为这种操作是不安全的,这篇文章主要就是记 ...
- 【Linux 内核】实时调度类 ⑥ ( 实时调度类核心函数源码分析 | 插入进程到执行队列 | 从执行队列中选择优先级最高的进程 )
文章目录 一.enqueue_task_rt 函数 ( 插入进程到执行队列 ) 二.pick_next_task_rt 函数 ( 从执行队列中选择优先级最高的进程 ) 本篇博客中 , 开始分析 str ...
- Android中实现获取相册中的图片扫描二维码的功能
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
- 中的图片文字识别_文字识别 图片转文字【小程序】
文字识别小程序在文章的底部 直接拉到文章底部就可使用 ↓↓↓↓↓↓ 大家在平时办公或者学习中经常会处理到图片转文字的问题,对于一些打字比较快的朋友来说并没有太大的问题,但是对于一些打字慢的人来说确实一 ...
- 用python实现人脸识别输出画像_这个是利用OpenCV TensorFlow来实现图片人脸识别
安装 dlib dlib 是一个基于 C++ 编写的扩展库,包含有许多常用的机器学习算法以及图像处理函数. 并且还支持大量的数值计算,如矩阵.大整数随机运算等. 但是在编译安装 dlib 之前我们还需 ...
- Python提取word文档中的图片,识别图片文字之后再转存为word文档
#!/usr/bin/env python # coding: utf-8 import zipfile #压缩包 import os #文件库 import shutil import pytess ...
- ZXing 相册中识别二维码和条形码(直接引用就可以了)
*百度了很久一直没有找到关于相册获取条形码的Demo,真心是醉了,只能苦逼的去自己看 闲话不说直接搞起 分析: *核心 1,通过路径转换成bitmp对象 2,再bitmap对象转换成二进制图片(二值化 ...
最新文章
- npm包开发测试与发布
- 基础知识的学习,来自十年程序员的经验分享
- "unable to load dynamic library"错误的解决方法
- 最新开源:3TS腾讯事务处理技术验证系统(下)
- 工作277:v-model实战
- 一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0
- java中的基本数据类型和运算符_【Java基础】基本数据类型和运算符
- c语言之动态分配空间
- 注册页面的JSON响应方式详细分析(与前端页面交互方式之一)
- 我的世界java版如何装mod_我的世界考古“初代贝爷生存”?开局3滴血,还没进游戏就要自闭了...
- Android设置Gmail邮箱
- 怎样在 linux 系统下增加一块硬盘
- Ruckus R500 AP设置
- 基础练习 回文数 C语言
- HDMI调试基本原理
- “科比男孩”被美国大学录取 即将出国圆梦
- 基于LiDAR里程计和先验地图的定位方法
- Python实现企业微信发送图片
- adobe Adobe Acrobat DC资源下载
- AWS亚马逊云EC2搭建ginblog系统