二維碼

来源:http://www.cnblogs.com/sg6548676/archive/2016/09/05/er-wei-ma.html
-Advertisement-
Play Games

使用系統自帶生成/掃描二維碼iOS7開始蘋果集成了二維碼的生成的掃描### 生成二維碼的步驟導入CoreImage框架 #import 通過濾鏡CIFilte生成二維碼### 二維碼的內容(傳統的條形碼只能放數字)純文本名片URL生成二維碼 // 1.創建過濾器 CIFilter *filter =... ...


使用系統自帶生成/掃描二維碼

  • iOS7開始蘋果集成了二維碼的生成的掃描 ### 生成二維碼的步驟
  • 導入CoreImage框架 #import <CoreImage/CoreImage.h>
  • 通過濾鏡CIFilte生成二維碼 ### 二維碼的內容(傳統的條形碼只能放數字)
  • 純文本
  • 名片
  • URL

生成二維碼

  // 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:300];

 /**
 *  根據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(@"沒有掃描到數據");
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系列開篇,準備將方向由安卓開發轉向移動安全,首先需要瞭解的就是Android的逆向工程。 現在簡要介紹初級階段需要的工具以及如何獲取並正確配置他們 如果在資源獲取方面遇到困難,留下郵箱我會將所有東西打包發給你 JRE,JDK,SDK,NDK 關於這些工具包的配置不做贅述。 apktool apkto ...
  • 大家好,前幾天我寫了一篇關於ormlite資料庫的使用方法,對於資料庫的使用是很方便,搭建起來也非常簡單,因為底層的關於資料庫的SQL語言都已經封裝成了方法,所以對於規避錯誤與使用都是很便捷,但是對於剛開始接觸資料庫的同學們來說,沒有弄清楚原理直接就使用,對於接受方面顯然是弊大於利的,所以今天我就帶 ...
  • 在Android Studio中運行APP時出現了以下錯誤: 解決的辦法是點擊:tools ->Android->sync project with gradles files! ...
  • 一、引言 如今,Android+html5開發已經成為最流行的開發模式。 Android 中可以通過webview來實現和js的交互,在程式中調用js代碼,只需要將webview控制項的支持js的屬性設置為true Android(Java)與JavaScript(HTML)交互有四種情況: 1) A ...
  • 新版中的TimePicker DatePicker是不支持使用遙控器的, 恢覆成低版本滾動模式只需要是xml文件加上一句即可: 本文為博主原創文章,轉載請註明出處 http://www.cnblogs.com/rencm/p/5842798.html ...
  • 1、Android 中的Json解析工具fastjson 、序列化、反序列化 2、Android Gson的使用總結 3、Android-JSONTool 一個簡易的Json框架類,小到只有一個類 有時為了簡化代碼的大小,儘可能的壓縮apk的大小。就不能再使用大而全的框架了。 ...
  • 一:理論知識點 1:什麼是FlexBox佈局? 彈性盒模型(The Flexible Box Module),又叫Flexbox,意為“彈性佈局”,旨在通過彈性的方式來對齊和分佈容器中內容的空間,使其能適應不同屏幕,為盒裝模型提供最大的靈活性。 Flex佈局主要思想是:讓容器有能力讓其子項目能夠改變 ...
  • 1、概念 Gson是谷歌發佈的一個json解析框架 2、如何獲取 github:https://github.com/google/gson android studio使用 查看 最新版本號 下載最新的jar包 ,http://search.maven.org/#search%7Cga%7C1%7 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...