iOS二维码的生成和扫描

发布时间 - 2026-01-10 23:21:35    点击率:

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下

属性

@property (strong,nonatomic)AVCaptureDevice * device;
@property (strong,nonatomic)AVCaptureDeviceInput * input;
@property (strong,nonatomic)AVCaptureMetadataOutput * output;
@property (strong,nonatomic)AVCaptureSession * session;
@property (strong,nonatomic)AVCaptureVideoPreviewLayer * layer; 
@property (nonatomic, strong)UIImageView *imageView;

二维码的生成

// 1.创建过滤器
  CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
 
  // 2.恢复默认
  [filter setDefaults];
 
  // 3.给过滤器添加数据(正则表达式/账号和密码)
  NSString *dataString = @"http://www.520it.com";
  NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
  [filter setValue:data forKeyPath:@"inputMessage"];
 
  // 4.获取输出的二维码
  CIImage *outputImage = [filter outputImage];
 
  //因为生成的二维码模糊,所以通过createNonInterpolatedUIImageFormCIImage:outputImage来获得高清的二维码图片
 
  // 5.显示二维码
  self.imageView.image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200];

 * createNonInterpolatedUIImageFormCIImage:outputImage方法的实现

/**
 * 根据CIImage生成指定大小的UIImage
 *
 * @param image CIImage
 * @param size 图片宽度
 */
- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size
{
  CGRect extent = CGRectIntegral(image.extent);
  CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
 
  // 1.创建bitmap;
  size_t width = CGRectGetWidth(extent) * scale;
  size_t height = CGRectGetHeight(extent) * scale;
  CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
  CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
  CIContext *context = [CIContext contextWithOptions:nil];
  CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
  CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
  CGContextScaleCTM(bitmapRef, scale, scale);
  CGContextDrawImage(bitmapRef, extent, bitmapImage);
 
  // 2.保存bitmap到图片
  CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
  CGContextRelease(bitmapRef);
  CGImageRelease(bitmapImage);
  return [UIImage imageWithCGImage:scaledImage];
}

 二维码的扫描

// 1.创建捕捉会话
  AVCaptureSession *session = [[AVCaptureSession alloc] init];
  self.session = session;
 
  // 2.添加输入设备(数据从摄像头输入)
  AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
  AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
  [session addInput:input];
 
  // 3.添加输出数据(示例对象-->类对象-->元类对象-->根元类对象)
  AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
  [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
  [session addOutput:output];
 
  // 3.1.设置输入元数据的类型(类型是二维码数据)
  [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
 
  // 4.添加扫描图层
  AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
  layer.frame = self.view.bounds;
  [self.view.layer addSublayer:layer];
  self.layer = layer;
 
  // 5.开始扫描
  [session startRunning];

 *扫描到结果后会调用的方法

// 当扫描到数据时就会执行该方法
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
  if (metadataObjects.count > 0) {
    //获得扫描数据,最后一个时最新扫描的数据
    AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];
    NSLog(@"%@", object.stringValue);
 
    // 停止扫描
    [self.session stopRunning];
 
    // 将预览图层移除
    [self.layer removeFromSuperlayer];
  } else {
    NSLog(@"没有扫描到数据");
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# iOS二维码生成  # iOS二维码扫描  # iOS二维码  # iOS开发生成二维码图片(附中间带有小图标二维码)  # iOS二维码的生成代码  # ios swift3.0实现二维码扫描、生成、识别示例代码  # iOS中生成指定大小、指定颜色的二维码和条形码方法详解  # iOS 二维码生成及扫码详解及实例代码  # IOS生成与读取二维码名片  # IOS笔记061之二维码的生成和扫描  # iOS使用CIFilter生成二维码  # 图层  # 时就  # 后会  # 大家分享  # 具体内容  # 大家多多  # 移除  # 九宫格  # 正则表达式  # CIImage  # inputMessage  # outputImage  # 高清  # createNonInterpolatedUIImageFormCIImage  # forKeyPath  # NSData  # www  # data  # setValue  # NSUTF8StringEncoding 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 教学论文网站制作软件有哪些,写论文用什么软件 ?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  lovemo网页版地址 lovemo官网手机登录  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  详解jQuery停止动画——stop()方法的使用  制作电商网页,电商供应链怎么做?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  如何在万网开始建站?分步指南解析  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  高端建站如何打造兼具美学与转化的品牌官网?  WEB开发之注册页面验证码倒计时代码的实现  Laravel distinct去重查询_Laravel Eloquent去重方法  如何在建站之星绑定自定义域名?  青岛网站建设如何选择本地服务器?  如何正确选择百度移动适配建站域名?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  音乐网站服务器如何优化API响应速度?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  bootstrap日历插件datetimepicker使用方法  Laravel集合Collection怎么用_Laravel集合常用函数详解  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Java垃圾回收器的方法和原理总结  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  如何快速启动建站代理加盟业务?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Python制作简易注册登录系统  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何在腾讯云服务器快速搭建个人网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  郑州企业网站制作公司,郑州招聘网站有哪些?  千库网官网入口推荐 千库网设计创意平台入口  Laravel Session怎么存储_Laravel Session驱动配置详解  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  JavaScript如何操作视频_媒体API怎么控制播放  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何使用Telescope进行调试?(安装和使用教程)  大连网站制作公司哪家好一点,大连买房网站哪个好?  java ZXing生成二维码及条码实例分享  如何在建站之星网店版论坛获取技术支持?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何在阿里云虚拟主机上快速搭建个人网站?