这篇博客将会介绍二维码的生成。

由于没有什么东西值得长篇大论的,所以这里我就通过代码的实现介绍二维码。

第一部分

第一部分是二维码的简单生成没有其他重点介绍。

效果图

代码部分

//
// 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(, , , )];
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(, , , )];
imageView.image = [self createNonInterpolatedUIImageFormCIImage:image withSize:];
[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, , , 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 二维码生成的更多相关文章

  1. iOS二维码生成、识别、扫描等

    二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...

  2. iOS二维码生成-libqrencode编译报错

    libqrencode使用 1.将libqrencode文件夹整个拖入项目文件夹中 2.在要生成二维码的页面的 .m文件头部添加 #import "QRCodeGenerator.h&quo ...

  3. ios二维码生成

    二维码扫描现在已经有很多的库可以使用了,常用的有ZXing和ZBar.如果感兴趣的同学可以自行研究. libqrencode介绍:是一个用C语言编写的用来解析二维条形码(QR Code)的程序库,li ...

  4. iOS二维码生成与识别

    在 IOS7 以前,在IOS中实现二维码和条形码扫描,有两大开源组件 ZBar 与 ZXing. 总结下各自的缺点: ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 & ...

  5. iOS 二维码生成 记录一下

    #import <CoreImage/CoreImage.h> @property (nonatomic, nonnull , strong) UIImageView *showImage ...

  6. iOS二维码、条形码生成(可指定大小、颜色)

    一.前言: iOS7.0之后可以利用系统原生 API 生成二维码, iOS8.0之后可以生成条形码, 系统默认生成的颜色是黑色. 在这里, 利用以下方法可以生成指定大小.指定颜色的二维码和条形码, 还 ...

  7. iOS开发 二维码生成

    基于libqrencode的二维码生成 + (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size { ...

  8. Android 二维码 生成和识别(附Demo源码)

    今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS. Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技 ...

  9. Android 二维码 生成和识别(转)

    原博客地址 :http://www.cnblogs.com/weixing/archive/2013/08/28/3287120.html 还有几个写的也可以参考一下:http://www.itnos ...

随机推荐

  1. log4net各种Filter使用

    log4net里面的filter类常用的为: 1.DenyAllFilter 拒绝所用的日志输出 <filter type="log4net.Filter.LevelMatchFilt ...

  2. 解决Unreal Engine 4.7.6的DerivedDataCache在C盘疯狂膨胀的问题

    打开 YourEngineFolder\Engine\Config\BaseEngine.ini 将 Local=(Type=FileSystem, ReadOnly=, FoldersToClean ...

  3. NPM使用详解(上)

    1.NPM是什么? NPM是JavaScript的包管理工具,在安装NodeJS(什么?你不知道node?来,我们合计合计:https://nodejs.org/)的时候,会自动安装上npm. 要查看 ...

  4. php分享三十三:常量

    一:常量定义 1:在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量) 2:常量默认为大小写敏感 3:命名规则:用正则表达式是这样表达的:[a-zA-Z_\x7f-\xff][a-zA- ...

  5. AngularJS 五大特性,加快 Web 应用开发

    AngularJS 是谷歌的一个 JavaScript 框架,旨在简化前端应用程序的开发.如果你在开发单页的应用程序,我敢肯定你已经听说过它.我是 AngularJS 的忠实粉丝,在这篇文章中我将概述 ...

  6. iOS-UISegmentedControl-隐藏边框

    原理: 1. 用tintColor属性,把整个UISEgmentControl 设置成为透明色. 2. 设置正常状态下的titleTextAttributes.和选中状态下的titleTextAttr ...

  7. mysql模拟rownum的一个方法

    mysql> select * from t2; +----+---------------------+ | id | d | +----+---------------------+ :: ...

  8. ASP.NET运行时详解 集成模式和经典模式

    遗留问题 在<ASP.NET运行时详解 生命周期入口分析>中遗留两个问题,包括Application的InitInternal方法执行细节.IIS6和II7经典模式请求管道管理类Appli ...

  9. 数论 - 欧拉函数模板题 --- poj 2407 : Relatives

    Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11372   Accepted: 5544 Descri ...

  10. 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性

    [索引页][源码下载] 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性 作者:weba ...