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

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

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

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

首先說下生成二維碼

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

其次生成二維碼的步驟:

       導入CoreImage框架

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

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

2、恢復濾鏡的默認屬性

3、設置內容

4、獲取輸出文件

5、顯示二維碼

代碼實現 CoreImage

 // 二維碼的生成
 // 1、創(chuàng)建過濾器
 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];

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

重新生成高清圖片:網上找即可,具體過程可暫時不關心

/**
 * 根據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];
}

還有就是設置內容為網址時,如果帶有協(xié)議頭的話,會自動打開網頁。

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

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

回到頂部

掃描二維碼

AVFoundation框架

二維碼的掃描過程

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

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

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

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

3、添加掃描圖層 AVCaptureVideoPreviewLayer

4、開始掃描 startRunning

5、實現回調代理方法,獲取掃描結果 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、創(chuàng)建捕捉會話
 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];
}
/**
 * 實現output的回調方法
 */
- (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設備上使用二維碼,需要了解的朋友點擊這里。

相關文章

  • IOS中的webView加載HTML

    IOS中的webView加載HTML

    在日常開發(fā)中,我們?yōu)榱诵蕰玫胶芏嗪芏嗟腤ebView,比如在做某個明細頁面的時候我們返回給你的可能是一個html字符串,我們就需要將當前字符串展示到webView上面,所以我們對HTML標簽需要有一定的認識,下面我們來一起用html標簽和JS寫一個打地鼠游戲
    2016-02-02
  • 一個方法搞定iOS下拉放大及上推縮小

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

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

    IOS關閉鍵盤的方法

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

    輕松理解iOS 11中webview的視口

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

    Xcode中iOS應用開發(fā)的一般項目目錄結構和流程簡介

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

    iOS實現容器視圖控制器的方法

    本篇文章給大家詳細講述了iOS實現容器視圖控制器的方法,對此感興趣的朋友可以測試學習下。
    2018-02-02
  • iOS中NSArray數組常用處理方式

    iOS中NSArray數組常用處理方式

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

    Flutter?Widgets之標簽類控件Chip詳解

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

    詳解iOS的深淺拷貝

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

    iOS實現簡單的抽屜效果

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

最新評論

竹北市| 东安县| 桐乡市| 巍山| 昌吉市| 铜山县| 磐石市| 凤城市| 贵州省| 乌拉特中旗| 濉溪县| 临夏县| 荆州市| 通化县| 民乐县| 舞钢市| 新兴县| 新疆| 康平县| 黑山县| 鄂托克旗| 招远市| 磐石市| 咸丰县| 九龙城区| 北票市| 安西县| 正镶白旗| 赞皇县| 凤冈县| 姚安县| 滕州市| 神木县| 桑植县| 长兴县| 汉寿县| 台中县| 股票| 新乡县| 万盛区| 莲花县|