iOS - 长按图片识别图中二维码
长按图片识别图中二维码:
// 长按图片识别二维码
UILongPressGestureRecognizer *QrCodeTap = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(QrCodeClick:)];
[self.view addGestureRecognizer:QrCodeTap];
- (void)QrCodeClick:(UILongPressGestureRecognizer *)pressSender {
if (pressSender.state != UIGestureRecognizerStateBegan) {
return;//长按手势只会响应一次
}
// MJPhoto *photo = _photos[_currentPhotoIndex];
//截图 再读取
//第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了,获取当前屏幕分辨率[UIScreen mainScreen].scale
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 2.2);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CIImage *ciImage = [[CIImage alloc] initWithCGImage:image.CGImage options:nil];
CIContext *ciContext = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(YES)}]; // 软件渲染
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:ciContext options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}];// 二维码识别
NSArray *features = [detector featuresInImage:ciImage];
if (features.count) {
for (CIQRCodeFeature *feature in features) {
NSLog(@"qrCodeUrl = %@",feature.messageString); // 打印二维码中的信息
qrCodeUrl = feature.messageString;
}
// 初始化弹框 第一个参数是设置距离底部的边距
alertview = [[RomAlertView alloc] initWithMainAlertViewBottomInset: Title:nil detailText:nil cancelTitle:nil otherTitles:[NSMutableArray arrayWithObjects:@"保存图片",@"识别图中二维码",nil]];
alertview.tag = ;
// 设置弹框的样式
alertview.RomMode = RomAlertViewModeBottomTableView;
// 设置弹框从什么位置进入 当然也可以设置什么位置退出
[alertview setEnterMode:RomAlertEnterModeBottom];
// 设置代理
[alertview setDelegate:self];
// 显示 必须调用 和系统一样
[alertview show];
} else {
NSLog(@"图片中没有二维码");
}
}
#pragma mark -- RomAlertViewDelegate 弹框识别图中二维码
- (void)alertview:(RomAlertView *)alertview didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (alertview.tag == ) {
if ([alertview.otherTitles[indexPath.row] isEqualToString:@"保存图片"]) {
NSLog(@"保存图片");
[self saveButtonPressed];
}else if ([alertview.otherTitles[indexPath.row] isEqualToString:@"识别图中二维码"]){
NSLog(@"识别图中二维码");
// 隐藏
[alertview hide];
[self leftBackButtonPressed];
AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
if([delegate.window.rootViewController isKindOfClass:[UITabBarController class]]){
UITabBarController *tabBarController = (UITabBarController *)delegate.window.rootViewController;
UINavigationController *navigationController = [tabBarController selectedViewController];
UIViewController *vc = navigationController.topViewController;
//对结果进行处理跳转网页
ADWebViewViewController *controller = [[ADWebViewViewController alloc] init];
controller.m_url = qrCodeUrl;
controller.hidesBottomBarWhenPushed = YES;
[vc.navigationController pushViewController:controller animated:YES];
}
}
}
}
iOS - 长按图片识别图中二维码的更多相关文章
- Vue实现长按图片识别图中二维码
Vue实现长按图片识别图中二维码 思路:要想实现可以识别图片中的二维码,那必定是要将这张图进行上传操作,上传则需要file对象格式.不管是在H5还是APP中,展示的图片都是通过url的方式展示在img ...
- C#识别图中二维码
1.在NuGet中添加 ZXing.Net 2.实例代码 /// <summary> /// 识别图中二维码 /// </summary> /// <param name ...
- android选取系统相册图片后,识别图中二维码
项目中添加设备操作需要扫描二维码,考虑到多种扫码方式,也添加直接识别二维码图片的操作. 首先跳转系统相册选取图片 Intent intent = new Intent(Intent.ACTION_PI ...
- Android 长按识别图中二维码 zxing
#基于 Zxing, 初学Android 代码质量不高 //长按,通过zxing读取图片,判断是否有二维码 bigImage.setOnLongClickListener(new View.OnLon ...
- 【转】Delphi+Halcon实战一:两行代码识别QR二维码
Delphi+Halcon实战一:两行代码识别QR二维码 感谢网友:绝代双椒( QQ号应原作者要求隐藏了:xxxx6348)的支持 本文是绝代双椒的作品,因为最近在忙zw量化培训,和ziwang.co ...
- zxing 如何识别反转二维码
说起二维码扫描,估计很多人用的是 zxing 吧. 然而 zxing 虽然好用,但是却有一些坑. 这边分析一下自己实际项目遇到的一个坑. 什么坑呢? 下面举个栗子你就懂了. 这边生成二维码使用的是网络 ...
- 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用
因为公司推广的原因,没有合适的将苹果和安卓(ios和android)合成一个二维码的工具. 因为这个不难,主要是根据浏览器的UA进行判断,所以就自己开发了一个网站 网站名称叫:好推二维码 https ...
- php 合并图片 (将活动背景图片和动态二维码图片合成一张图片)
<?php //案例一:将活动背景图片和动态二维码图片合成一张图片 //图片一 $path_1 = './background.png'; //图片二 $path_2 = './FU0851_2 ...
- iOS中二维码的生成与使用(入门篇)
这里简单总结一下关于二维码的扫描与生成,用的是原生的AVFoundation框架,其实这个框架目前功能还是够用的,不过这里推荐一个二维码扫描的第三方(face++),网址就不贴了,直接度娘就OK,里面 ...
随机推荐
- 自动换行后缩进怎么做(CSS)?(可用于 Li y 元素的排版)
<style type="text/css">li{ width:100px; border:1px solid #ccc; padding-left:25px; te ...
- webApi2 上传大文件代码
上传大文件,取消内存缓存: GlobalConfiguration.Configuration.Services.Replace(typeof(IHostBufferPolicySelector), ...
- opencv3.2将中文输出到图片上
opencv自带的putText函数无法输出utf8类型的字符,因此无法将中文打印到图片上.用这篇文章的freetype可以实现中文输出,但是需要将字符解码转码比较麻烦,而Pillow的Image函数 ...
- mongo文件空间
mongo的文件空间,是由一个一个的文件空间组成,如下图 在mongodb刚安装完成时只有一个指定的db都只有一个文件空间而已,例如这里的db是filedb 那么他的第一个文件空间为filedb.0, ...
- 登陆时验证码的制作(asp.net)
登陆时验证码的制作(asp.net) 1.显示样式: 2.新建一个页,Default2.aspx 3.在Page_load事件拷入如下代码 stringtmp = RndNum(4); HttpCoo ...
- C#WinForm窗体事件执行次序
当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件: System.Windows.Forms.Control.HandleCreated ...
- 8 -- 深入使用Spring -- 1...1Bean后处理器
8.1.1 Bean后处理器(BeanPostProcessor) Bean后处理器主要负责对容器中其他Bean执行后处理,例如为容器中的目标Bean生成代理等. Bean后处理器会在Bean实例创建 ...
- c# new的三种用法
在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数.这种大家都比较熟悉,没什么好说的了. 2)new 修饰符:在用作修饰符时,new 关键字可以显 ...
- cocos2d-x 弹出对话框
登陆界面有一点注册按钮,点击之后弹出一个框,让用户输入一些信息; 在网上找的一些方法都是派生一个类,然后自己实现; 我觉得太麻烦了. 我使用分层的方式来显示, 启动界面就一个,背景图片加几个按钮:登陆 ...
- IOPS性能指标
如何计算mysql的IOPS? qps 每秒处理的查询数tps 每秒处理的事务数IOPS,每秒磁盘进行的I/O操作次数 今天看到一篇文章说磁盘理论最大IOPS为200左右,我有两个疑问:1.MYSQL ...