最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IOS筆記061之二維碼的生成和掃描

 更新時(shí)間:2015年08月21日 15:16:13   作者:slq0378  
隨著移動(dòng)設(shè)備的普及為二維碼提供了一個(gè)很好應(yīng)用平臺(tái),無論是在商城購物還是美食城都離不開二維碼,本篇文章就給大家介紹IOS筆記061之二維碼的生成和掃描,感興趣的朋友可以過來一起學(xué)習(xí)啦,本文內(nèi)容講的很詳細(xì)

如今二維碼隨處可見,無論是實(shí)物商品還是各種禮券都少不了二維碼的身影。而手機(jī)等移動(dòng)設(shè)備又成為二維碼的一個(gè)很好的應(yīng)用平臺(tái),不管是生成二維碼還是掃碼二維碼。本篇文章從生成二維碼、掃描二維碼展開分析,通過內(nèi)容分析二維碼用起來也很easy了。

首先說下生成二維碼

       二維碼可以存放純文本、名片或者URL

其次生成二維碼的步驟:

       導(dǎo)入CoreImage框架

再次通過濾鏡CIFilter生成二維碼

1、創(chuàng)建過濾器

2、恢復(fù)濾鏡的默認(rèn)屬性

3、設(shè)置內(nèi)容

4、獲取輸出文件

5、顯示二維碼

代碼實(shí)現(xiàn) CoreImage

 // 二維碼的生成
 // 1、創(chuàng)建過濾器
 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
 // 2、恢復(fù)濾鏡的默認(rèn)屬性
 [filter setDefaults];
 // 3、設(shè)置內(nèi)容
 NSString *str = @"這是一個(gè)二維碼的生成結(jié)果";
 NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
 // 使用KVO設(shè)置屬性
 [filter setValue:data forKey:@"inputMessage"];
 // 4、獲取輸出文件
 CIImage *outputImage = [filter outputImage];
 // 5、顯示二維碼
 self.imageView.image = [UIImage imageWithCIImage:outputImage];

這樣顯示的圖片不是很清晰,可以自己重繪圖片

重新生成高清圖片:網(wǎng)上找即可,具體過程可暫時(shí)不關(guān)心

/**
 * 根據(jù)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.創(chuàng)建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];
}

還有就是設(shè)置內(nèi)容為網(wǎng)址時(shí),如果帶有協(xié)議頭的話,會(huì)自動(dòng)打開網(wǎng)頁。

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

必須帶有協(xié)議頭才能打開

回到頂部

掃描二維碼

AVFoundation框架

二維碼的掃描過程

1、創(chuàng)建捕捉會(huì)話AVCaptureSession

添加輸入設(shè)備(數(shù)據(jù)從攝像頭輸入) AVCaptureDevice AVCaptureDeviceInput

2、添加輸出數(shù)據(jù)(示例對(duì)象-->類對(duì)象-->元類對(duì)象-->根元類對(duì)象) AVCaptureMetadataOutput

2.1.設(shè)置輸入元數(shù)據(jù)的類型(類型是二維碼數(shù)據(jù)) setMetadataObjectTypes

3、添加掃描圖層 AVCaptureVideoPreviewLayer

4、開始掃描 startRunning

5、實(shí)現(xiàn)回調(diào)代理方法,獲取掃描結(jié)果 captureOutput: :

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController () <AVCaptureMetadataOutputObjectsDelegate>
/**顯示圖層*/
@property (nonatomic, strong) AVCaptureVideoPreviewLayer *layer;
/**捕捉會(huì)話*/
@property (nonatomic, strong) AVCaptureSession *session;
@end
@implementation ViewController

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
 // 二維碼的掃描
 // 1、創(chuàng)建捕捉會(huì)話
 AVCaptureSession *session = [[AVCaptureSession alloc] init];
 self.session = session;
 // 2.添加輸入設(shè)備(數(shù)據(jù)從攝像頭輸入)
 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
 AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
 [session addInput:input];
 // 3、添加輸出數(shù)據(jù)(示例對(duì)象-->類對(duì)象-->元類對(duì)象-->根元類對(duì)象)
 AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
 [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
 [session addOutput:output];
 // 3.1.設(shè)置輸入元數(shù)據(jù)的類型(類型是二維碼數(shù)據(jù))
 [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];
}
/**
 * 實(shí)現(xiàn)output的回調(diào)方法
 */
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
 // 數(shù)組metadataObjects中存放結(jié)果數(shù)據(jù)
 if (metadataObjects.count > 0) {
 // 獲取最終的讀取結(jié)果
 AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];
 NSLog(@"%@",object.stringValue);
 [self.session stopRunning];
 [self.layer removeFromSuperlayer];
 }
 else
 {
 NSLog(@"沒有掃描到數(shù)據(jù)");
 }
}

總結(jié)一句話:這個(gè)二維碼使用起來也不難

本文就到此為止,IOS筆記061之二維碼的生成和掃描希望在今后的工作和學(xué)習(xí)能夠幫助到大家。下面文章給大家分享如何在蘋果iOS設(shè)備上使用二維碼,需要了解的朋友點(diǎn)擊這里。

相關(guān)文章

  • IOS中的webView加載HTML

    IOS中的webView加載HTML

    在日常開發(fā)中,我們?yōu)榱诵蕰?huì)用到很多很多的WebView,比如在做某個(gè)明細(xì)頁面的時(shí)候我們返回給你的可能是一個(gè)html字符串,我們就需要將當(dāng)前字符串展示到webView上面,所以我們對(duì)HTML標(biāo)簽需要有一定的認(rèn)識(shí),下面我們來一起用html標(biāo)簽和JS寫一個(gè)打地鼠游戲
    2016-02-02
  • 一個(gè)方法搞定iOS下拉放大及上推縮小

    一個(gè)方法搞定iOS下拉放大及上推縮小

    在很多的APP中,我們可以看到一個(gè)列表頂部的圖片會(huì)隨著下拉會(huì)放大,隨著上推縮小。這樣的效果沒能給定一個(gè)固有名詞,現(xiàn)在本文介紹使用代碼實(shí)現(xiàn)這樣的效果,代碼量很少,容易理解。當(dāng)然實(shí)現(xiàn)效果是很好的。
    2016-07-07
  • IOS關(guān)閉鍵盤的方法

    IOS關(guān)閉鍵盤的方法

    在iOS應(yīng)用開發(fā)中,有三類視圖對(duì)象會(huì)打開虛擬鍵盤,進(jìn)行輸入操作,但如何關(guān)閉虛擬鍵盤,卻沒有提供自動(dòng)化的方法。這個(gè)需要我們自己去實(shí)現(xiàn)。
    2015-05-05
  • 輕松理解iOS 11中webview的視口

    輕松理解iOS 11中webview的視口

    這篇文章主要介紹了iOS 11中webview的視口知識(shí),需要的朋友可以參考下
    2017-09-09
  • Xcode中iOS應(yīng)用開發(fā)的一般項(xiàng)目目錄結(jié)構(gòu)和流程簡介

    Xcode中iOS應(yīng)用開發(fā)的一般項(xiàng)目目錄結(jié)構(gòu)和流程簡介

    這篇文章主要介紹了Xcode中iOS應(yīng)用開發(fā)的一般項(xiàng)目目錄結(jié)構(gòu)和流程簡介,包括項(xiàng)目所需的一些平臺(tái)路徑如模擬器路徑等的介紹,需要的朋友可以參考下
    2016-02-02
  • iOS實(shí)現(xiàn)容器視圖控制器的方法

    iOS實(shí)現(xiàn)容器視圖控制器的方法

    本篇文章給大家詳細(xì)講述了iOS實(shí)現(xiàn)容器視圖控制器的方法,對(duì)此感興趣的朋友可以測(cè)試學(xué)習(xí)下。
    2018-02-02
  • iOS中NSArray數(shù)組常用處理方式

    iOS中NSArray數(shù)組常用處理方式

    這篇文章主要介紹了iOS中NSArray數(shù)組常用處理方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • Flutter?Widgets之標(biāo)簽類控件Chip詳解

    Flutter?Widgets之標(biāo)簽類控件Chip詳解

    這篇文章主要為大家介紹了Flutter?Widgets之標(biāo)簽類控件Chip詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳解iOS的深淺拷貝

    詳解iOS的深淺拷貝

    本文詳細(xì)介紹了IOS中的三種拷貝方式,對(duì)iOS的深淺拷貝有疑問的朋友們可以參考下本文。
    2016-08-08
  • iOS實(shí)現(xiàn)簡單的抽屜效果

    iOS實(shí)現(xiàn)簡單的抽屜效果

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)簡單的抽屜效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評(píng)論

大城县| 巴楚县| 临颍县| 北碚区| 西青区| 仁化县| 闽侯县| 利津县| 佳木斯市| 龙泉市| 甘南县| 班玛县| 务川| 新泰市| 康平县| 芜湖县| 弥渡县| 社会| 隆德县| 邓州市| 桂平市| 天等县| 商水县| 婺源县| 巴中市| 章丘市| 增城市| 沛县| 敦化市| 孝义市| 太和县| 三江| 昌乐县| 东阿县| 大丰市| 伊宁市| 商城县| 股票| 桑植县| 迁安市| 房产|