iOS中的原生框架生成二維碼


一、二維碼的生成

  • 從iOS7開始集成了二維碼的生成和讀取功能
  • 此前被廣泛使用的ZBarSDK 目前不支持64位處理器,除此之外還有ZXingSDK也可以生成二維碼
  • 生成二維碼的步驟
    • 導入CoreImage框架
    • 通過濾鏡CIFilter生成二維碼  
  • 二維碼的內容(傳統的條形碼只能放數字)
    • 純文本
    • 名片
    • URL(可直接跳轉網頁)

 

 

二維碼生成的具體代碼

 

 1 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
 2     
 3     //創建過濾器
 4     CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
 5     
 6     //過濾器恢復默認
 7     [filter setDefaults];
 8     
 9     //給過濾器添加數據
10     NSString *string = @"http://www.cnblogs.com/PSSSCode/";
11     
12     //將NSString格式轉化成NSData格式
13     NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
14     
15     [filter setValue:data forKeyPath:@"inputMessage"];
16     
17     //獲取二維碼過濾器生成的二維碼
18     CIImage *image = [filter outputImage];
19     
20     //將獲取到的二維碼添加到imageview上
21     self.imageView.image =[UIImage imageWithCIImage:image];

從上圖可以看出生成的二維碼模糊不清晰,在上面代碼塊最后一步換成調用下面代碼塊中的方法即可

 1 /**
 2  *  根據CIImage生成指定大小的UIImage
 3  *
 4  *  @param image CIImage
 5  *  @param size  圖片寬度
 6  */
 7 - (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size
 8 {
 9     CGRect extent = CGRectIntegral(image.extent);
10     CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
11     
12     // 1.創建bitmap;
13     size_t width = CGRectGetWidth(extent) * scale;
14     size_t height = CGRectGetHeight(extent) * scale;
15     CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
16     CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
17     CIContext *context = [CIContext contextWithOptions:nil];
18     CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
19     CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
20     CGContextScaleCTM(bitmapRef, scale, scale);
21     CGContextDrawImage(bitmapRef, extent, bitmapImage);
22     
23     // 2.保存bitmap到圖片
24     CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
25     CGContextRelease(bitmapRef);
26     CGImageRelease(bitmapImage);
27     return [UIImage imageWithCGImage:scaledImage];
28 }

 

正常代碼生成的二維碼                調用代碼后生成的二維碼

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM