iOS-AVFoundation二维码扫描,二维码扫描,图片的无损放大

2024-01-13 21:08

本文主要是介绍iOS-AVFoundation二维码扫描,二维码扫描,图片的无损放大,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

二维码扫描

扫描实现思路

  • 二维码实现思路

    1. 输入设备(用来获取外界信息) 摄像头, 麦克风, 键盘
    2. 输出设备 (将收集到的信息, 做解析, 来获取收到的内容)
    3. 会话session (用来连接输入和输出设备)
    4. 特殊的layer (展示输入设备所采集的信息)

    下面上代码:

    //
    // ViewController.m
    // 二维码
    //
    // Created by VolitationXiaoXing on 15/12/17.
    // Copyright © 2016年 dream. All rights reserved.
    //

 #import "ViewController.h"#import <AVFoundation/AVFoundation.h>#import "HMPreView.h"@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>//1. 输入设备(用来获取外界信息)  摄像头, 麦克风, 键盘@property (nonatomic, strong) AVCaptureDeviceInput *input;//2. 输出设备 (将收集到的信息, 做解析, 来获取收到的内容)
@property (nonatomic, strong) AVCaptureMetadataOutput *output;//3. 会话session (用来连接输入和输出设备)
@property (nonatomic, strong) AVCaptureSession *session;//4. 特殊的layer (展示输入设备所采集的信息)//@property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;@property (nonatomic, strong) HMPreView *preview;@property (weak, nonatomic) IBOutlet UILabel *label;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.}#pragma mark 点击屏幕开始扫描
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{//1.输入设备(用来获取外界信息)  摄像头, 麦克风, 键盘AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];self.input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];//2.输出设备 (将收集到的信息, 做解析, 来获取收到的内容)self.output = [AVCaptureMetadataOutput new];//3.会话session (用来连接输入和输出设备)self.session = [AVCaptureSession new];// 会话扫描展示的大小
[self.session setSessionPreset:AVCaptureSessionPresetHigh];// 会话跟输入和输出设备关联
if ([self.session canAddInput:self.input]) {[self.session addInput:self.input];
}
if ([self.session canAddOutput:self.output]) {[self.session addOutput:self.output]; 
}//下面两句代码应该写在此处//制定输出设备的代理, 用来接受返回的数据[self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];//设置元数据类型 二维码QRCode[self.output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];//4.特殊的layer (展示输入设备所采集的信息)//self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];// 大小layer的大小//self.previewLayer.frame = self.view.bounds;//[self.view.layer addSublayer:self.previewLayer];//这个View是一个自定义的View,就是中间一个正方形,中间有一个线上下扫动self.preview = [[HMPreView alloc] initWithFrame:self.view.bounds];self.preview.session = self.session;[self.view addSubview:self.preview];//5. 启动会话[self.session startRunning];
}/**captureOutput : 输出设备metadataObjects : 元数据对象的数组connection : 连接*/- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{//1. 停止会话[self.session stopRunning];//2. 删除layer//[self.previewLayer removeFromSuperlayer];[self.preview removeFromSuperview];//3. 遍历数据获取内容for (AVMetadataMachineReadableCodeObject *obj in metadataObjects) {//NSLog(@"obj: %@",obj.stringValue);self.label.text = obj.stringValue;}
}@end

生成二维码

下面是生成二维码的代码,包括了无损放大图片

   //
//  ViewController.m
//  QRCodeCreat
//
//  Created by VolitationXiaoXing on 16/7/14.
//  Copyright © 2016年 itcast. All rights reserved.
//#import "ViewController.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UIImageView *imgView;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];[filter setDefaults];NSData *data = [@"这个是二维码中的数据" dataUsingEncoding:NSUTF8StringEncoding];[filter setValue:data forKey:@"inputMessage"];//设置容错率[filter setValue:@"H" forKey:@"inputCorrectionLevel"];CIImage *coreImage = [filter outputImage];//  1.无损放大图片UIImage *QRImage = [self imageWithCIImage:coreImage andSize:self.imgView.bounds.size];//  2.合并头像CGSize headSize = CGSizeMake(self.imgView.bounds.size.width * 0.3, self.imgView.bounds.size.height * 0.3);UIImage *overImage = [self imageWithBackgroundImage:QRImage centerImage:[UIImage imageNamed:@"head"] centerImageSize:headSize];self.imgView.image = overImage;}//  1.无损放大图片这里用到了CIImage与CGImage与UIImage转换- (UIImage *)imageWithCIImage:(CIImage *)coreImage andSize:(CGSize)size{// 1.CIImage --> CGImageCIContext *tempContext = [CIContext contextWithOptions:nil];CGImageRef originCGImage = [tempContext createCGImage:coreImage fromRect:coreImage.extent];// 2.创建和size一样大的图形上下文(Bitmap)CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();CGContextRef bitmapCtx = CGBitmapContextCreate(NULL, size.width, size.height, 8, 0, cs, kCGImageAlphaNone);// 3.CGImage 渲染到上下文中CGContextSetInterpolationQuality(bitmapCtx, kCGInterpolationNone);CGContextDrawImage(bitmapCtx, CGRectMake(0, 0, size.width, size.height), originCGImage);// 4.将图形上下文中的图像取出来CGImageRef QRImage = CGBitmapContextCreateImage(bitmapCtx);//  释放// returnreturn [UIImage imageWithCGImage:QRImage];}//  2.合并头像- (UIImage *)imageWithBackgroundImage:(UIImage *)backgroundImage centerImage:(UIImage *)centerImage centerImageSize:(CGSize)centerSize{// 1.开启图形上下文UIGraphicsBeginImageContext(backgroundImage.size);// 2.先画背景[backgroundImage drawAtPoint:CGPointZero];// 3.画头像CGFloat headW = centerSize.width;CGFloat headH = centerSize.height;CGFloat headX = (backgroundImage.size.width - headW) * 0.5;CGFloat headY = (backgroundImage.size.width - headH) * 0.5;[centerImage drawInRect:CGRectMake(headX, headY, headW, headH)];// 4.取图像UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return newImage;}@end

这篇关于iOS-AVFoundation二维码扫描,二维码扫描,图片的无损放大的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/602782

相关文章

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细