iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >IOS笔记061之二维码的生成和扫描
  • 513
分享到

IOS笔记061之二维码的生成和扫描

ios二维码 2022-05-20 22:05:48 513人浏览 安东尼
摘要

如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。而手机等移动设备又成为二维码的一个很好的应用平台,不管是生成二维码还是扫码二维码。本篇文章从生成二维码、扫描二维码

如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。而手机等移动设备又成为二维码的一个很好的应用平台,不管是生成二维码还是扫码二维码。本篇文章从生成二维码、扫描二维码展开分析,通过内容分析二维码用起来也很easy了。

首先说下生成二维码

       二维码可以存放纯文本、名片或者URL

其次生成二维码的步骤:

       导入CoreImage框架

再次通过滤镜CIFilter生成二维码

创建过滤器

恢复滤镜的默认属性

设置内容

获取输出文件

显示二维码

代码实现 CoreImage


 // 二维码的生成
 // 1、创建过滤器
 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
 // 2、恢复滤镜的默认属性
 [filter setDefaults];
 // 3、设置内容
 NSString *str = @"这是一个二维码的生成结果";
 NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
 // 使用KVO设置属性
 [filter setValue:data forKey:@"inputMessage"];
 // 4、获取输出文件
 CIImage *outputImage = [filter outputImage];
 // 5、显示二维码
 self.imageView.image = [UIImage imageWithCIImage:outputImage];

这样显示的图片不是很清晰,可以自己重绘图片

重新生成高清图片:网上找即可,具体过程可暂时不关心



- (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];
}

还有就是设置内容为网址时,如果带有协议头的话,会自动打开网页。


NSString *str = @http://www.baidu.com/;

必须带有协议头才能打开

回到顶部

扫描二维码

AVFoundation框架

二维码的扫描过程

创建捕捉会话AVCaptureSession

添加输入设备(数据从摄像头输入) AVCaptureDevice AVCaptureDeviceInput

添加输出数据(示例对象-->类对象-->元类对象-->根元类对象) AVCaptureMetadataOutput

1.设置输入元数据的类型(类型是二维码数据) setMetadataObjectTypes

添加扫描图层 AVCaptureVideoPreviewLayer

开始扫描 startRunning

实现回调代理方法,获取扫描结果 captureOutput: :


#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController () <AVCaptureMetadataOutputObjectsDelegate>

@property (nonatomic, strong) AVCaptureVideoPreviewLayer *layer;

@property (nonatomic, strong) AVCaptureSession *session;
@end
@implementation ViewController

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 // 二维码的扫描
 // 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
{
 // 数组metadataObjects中存放结果数据
 if (metadataObjects.count > 0) {
 // 获取最终的读取结果
 AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];
 NSLog(@"%@",object.stringValue);
 [self.session stopRunning];
 [self.layer removeFromSuperlayer];
 }
 else
 {
 NSLog(@"没有扫描到数据");
 }
}

总结一句话:这个二维码使用起来也不难

本文就到此为止,iOS笔记061之二维码的生成和扫描希望在今后的工作和学习能够帮助到大家。下面文章给大家分享如何在苹果iOS设备上使用二维码,需要了解的朋友点击这里

--结束END--

本文标题: IOS笔记061之二维码的生成和扫描

本文链接: https://www.lsjlt.com/news/30137.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android studio 实现生成二维码和扫描二维码
    效果图 build.gradle(:app)添加依赖 dependencies { implementation 'com.google.zxing:core:3.3.3' imple...
    99+
    2023-09-30
    android studio android ide
  • Android中二维码的扫描和生成(使用zxing库)
    目录一.zxing是什么?二.集成zxing框架三.界面设计四.二维码生成五.二维码扫描附:Android使用Zxing识别图片多个二维码总结一.zxing是什么? zxing是go...
    99+
    2024-04-02
  • 如何在 ASP 中实现二维码的生成与扫描?
    二维码已经成为了现代通信和支付的重要方式。在 ASP 中,生成和扫描二维码是一项非常有用的功能,可以应用于各种场景,例如电子支付、门禁管理、会员卡等等。本文将介绍如何在 ASP 中实现二维码的生成与扫描。 一、生成二维码 在 ASP 中,我...
    99+
    2023-10-25
    二维码 laravel 面试
  • 如何在 Go 语言中实现二维码生成和扫描的接口?
    Go 语言是一种高效的编程语言,它的强大之处在于它的简洁性和高效性。在这篇文章中,我们将讨论如何使用 Go 语言实现二维码生成和扫描的接口。我们将涵盖以下主题: 什么是二维码? 生成二维码的方式 Go 语言中的二维码生成 扫描二维码 Go...
    99+
    2023-08-27
    二维码 索引 接口
  • 在大数据时代,Python如何应用于二维码生成和扫描?
    在大数据时代,二维码作为一种快速便捷的信息传递方式,被广泛应用于各个领域。Python作为一种高效、易学、易用的编程语言,也在二维码生成和扫描方面发挥着越来越重要的作用。本文将介绍Python在二维码生成和扫描方面的应用。 一、二维码生成 ...
    99+
    2023-11-04
    大数据 二维码 自然语言处理
  • ASP 学习笔记:如何在 Linux 上生成二维码?
    二维码是一种在移动互联网时代广泛使用的图形码,可以包含各种类型的信息,如文本、网址、电话号码等。在 ASP 中,我们可以通过一些库和工具来生成二维码。本文将介绍如何在 Linux 上使用 ASP 生成二维码,并提供一些演示代码。 一、安装...
    99+
    2023-11-01
    学习笔记 二维码 linux
  • python中扫描条形码和二维码的实现代码
    简单说明,代码太难懂,先做此记录留待来日在看 步骤: 1,pip install pyzbar安装好该模块。pyzbar模块是Python一个开源库用于扫描和识别二维码信息。 2,...
    99+
    2024-04-02
  • Java学习笔记:如何使用对象生成二维码?
    二维码是一种广泛使用的二维条形码,可以被扫描器扫描并解码出信息。在如今的数字化时代,二维码已成为人们日常生活中不可或缺的一部分。在Java编程中,我们可以使用对象生成二维码来方便地生成二维码图片,本文将介绍如何使用Java对象生成二维码。...
    99+
    2023-08-13
    学习笔记 对象 二维码
  • 如何在Python中生成二维码?学习笔记详解。
    Python作为一种强大的编程语言,拥有丰富的库和模块,可以帮助开发者完成各种任务。其中,生成二维码是一种非常实用的功能,可以帮助我们快速生成二维码,并应用到各种场景中,比如支付、电子票据、二维码防伪等。那么,在Python中如何生成二维码...
    99+
    2023-08-29
    path 二维码 学习笔记
  • 分布式系统中如何利用Python实现高效的二维码生成和扫描?
    随着移动互联网的快速发展,二维码已经成为了一种非常重要的信息传递方式。在很多场景中,我们需要使用二维码来实现不同设备之间的信息交换,比如支付、扫码登录等。在分布式系统中,如何实现高效的二维码生成和扫描是一个非常有意义的问题。 Python...
    99+
    2023-10-02
    关键字 二维码 分布式
  • ASP 学习笔记:如何在 Linux 上生成漂亮的二维码?
    在日常生活中,我们常常会遇到需要生成二维码的情况,例如个人名片、产品包装等。如果你使用 Linux 操作系统,那么本文将会为你介绍如何使用 ASP 在 Linux 上生成漂亮的二维码。 ASP(Active Server Pages)是一...
    99+
    2023-11-01
    学习笔记 二维码 linux
  • Java学习笔记:学会使用对象生成漂亮的二维码
    二维码是近年来非常流行的一种信息快速传递方式,它可以将一些文本信息、网址等内容编码成一张图像,方便用户在移动设备上进行扫描识别。在Java语言中,我们可以使用一些开源的库来生成漂亮的二维码图像。本文将介绍如何使用对象生成二维码,并提供一些...
    99+
    2023-08-13
    学习笔记 对象 二维码
  • Linux 用户必读:ASP 学习笔记中的二维码生成技巧!
    二维码已经成为了一种非常流行的信息传递方式。它能够快速而方便地将信息传递给他人,使得人们的生活变得更加便捷。在 ASP 学习笔记中,我们可以通过学习一些简单的技巧,来生成高质量的二维码。本文将会带你深入了解这些技巧。 一、二维码生成的基本...
    99+
    2023-11-01
    学习笔记 二维码 linux
  • 如何使用Java实现分布式索引和二维码扫描的集成?
    Java作为一种强大的编程语言,可以实现各种应用程序的开发。本文将介绍如何使用Java实现分布式索引和二维码扫描的集成,帮助读者更好地理解这一过程。 一、分布式索引的实现 分布式索引是指将索引数据存储在多个节点上,以提高查询效率和可靠性。在...
    99+
    2023-09-26
    分布式 索引 二维码
  • Android利用zxing快速集成二维码扫描的实例教程
    前言大家应该都还记得,以前的我们常见的都是条形扫码,自从微信使用二维码扫描后,现在市场上基本都用二维码扫描,基本上每一个项目都会有一个二维码扫描,这篇就简单快速的实现一个扫描效果,让我们对二维码的扫描有一个初步的认识和让我们的项目可以快速的...
    99+
    2023-05-30
    android zxing 集成二维码
  • 二维码是什么?Java学习笔记中的对象如何生成它?
    二维码是一种用于快速识别信息的编码方式,它由黑白相间的方块组成,可储存大量信息,而且读取速度快。在当今信息化的社会中,二维码已经成为了一种重要的信息传递方式。而在Java学习笔记中,我们可以通过一些对象来生成二维码。本篇文章将介绍二维码的基...
    99+
    2023-08-13
    学习笔记 对象 二维码
  • 你会使用 ASP 吗?看看这些 Linux 上的二维码生成笔记!
    二维码已经成为了现代生活中不可或缺的一部分。它们被用于许多不同的用途,包括商业广告、电子支付、身份验证等等。如果你需要在 Linux 上生成二维码,那么你可能需要一些帮助。在本文中,我们将介绍如何使用 ASP 来生成二维码。 ASP 是一...
    99+
    2023-11-01
    学习笔记 二维码 linux
  • python应用之qrcode生成二维码的示例
    本文将为大家详细介绍“python应用之qrcode生成二维码的示例”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“python应用之qrcode生成二维码的示例”能够给你意想不到的收获,请大家跟着小编的思路慢...
    99+
    2023-06-06
  • Android利用zxing生成二维码的过程记录
    目录二维码生成原理(即工作原理)效果图如下:前提:源码如下:总结二维码生成原理(即工作原理) 二维码官方叫版本Version。Version 1是21 x 21的矩阵,Versio...
    99+
    2024-04-02
  • Java 生成带Logo和文字的二维码
    目录依赖生成二维码生成普通二维码生成带Logo二维码读取二维码链接ZXing 是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zx...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作