IOS 二維碼產生

來源:互聯網
上載者:User

標籤:apc   注意   sda   過濾器   rpo   imp   getwidth   url   inf   

 這篇部落格將會介紹二維碼的產生。

 由於沒有什麼東西值得長篇大論的,所以這裡我就通過代碼的實現介紹二維碼。

第一部分

第一部分是二維碼的簡單產生沒有其他重點介紹。

代碼部分

////  ViewController.m//  CX 二維碼產生////  Created by ma c on 16/4/12.//  Copyright ? 2016年 bjsxt. All rights reserved.//#import "ViewController.h"#import <CoreImage/CoreImage.h>@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    }- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{        //建立過濾器    CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];    //恢複預設設定    [filter setDefaults];    //給過濾器添加資料    NSString * str = @"旭寶愛吃魚";//這裡的文本可以是URL    NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];    [filter setValue:data forKey:@"inputMessage"];    //輸出擷取的二維碼     CIImage * image = [filter outputImage];    //顯示二維碼    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 100, 100)];    imageView.image = [UIImage imageWithCIImage:image];    [self.view addSubview:imageView];    }@end

雖然說很簡單,但是值得注意的是原生架構中的方法產生的二維碼是CI的因此我們在顯示之前要處理一下。

掃描第一部分出來的是一段文字,當然按照注釋如果你加入url也可以彈出網站。

如果仔細觀察不難發現,二位碼的清晰度並不高。我在下面介紹一下使其清晰度變高的方法。

第二部分

第二部分介紹的是使二維碼的清晰度變高的方法。


代碼部分

////  ViewController.m//  CX 二維碼產生////  Created by ma c on 16/4/12.//  Copyright ? 2016年 bjsxt. All rights reserved.//#import "ViewController.h"#import <CoreImage/CoreImage.h>@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    }- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{        //建立過濾器    CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];    //恢複預設設定    [filter setDefaults];    //給過濾器添加資料    NSString * str = @"旭寶愛吃魚";//這裡的文本可以是URL    NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];    [filter setValue:data forKey:@"inputMessage"];    //輸出擷取的二維碼     CIImage * image = [filter outputImage];    //顯示二維碼    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 100, 100)];    imageView.image = [self createNonInterpolatedUIImageFormCIImage:image withSize:200];    [self.view addSubview:imageView];}/** *  根據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];}@end

值得注意的是這個方法可以變為類別。

這些弄好之後我們要想一想很多時候二維碼中間是有圖片的該怎麼做呢???

很簡單只要自己弄張圖片覆蓋在二維碼中間即可(注意圖片尺寸掌握好)

 

IOS 二維碼產生

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.