二维码是一种比一维码更高级的条码格式。一维码只能在一个方向(一般是水平方向)上表达信息,而二维码在水平和垂直方向都可以存储信息。一维码只能由数字和字母组成,而二维码能存储汉字、数字和图片等信息,因此二维码的应用领域要广得多。

相信大家在大部分app中都会遇到生成或者扫描二维码的功能需求,今天就给大家讲一下二维码生成。

1、生成原生二维码

// 1.创建过滤器CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];// 2.恢复默认[filter setDefaults];// 3.给过滤器添加数据if (!info) {NSLog(@"info不能为nil");return [UIImage new];}NSData *data = [info dataUsingEncoding:NSUTF8StringEncoding];// 4.通过KVO设置滤镜inputMessage数据[filter setValue:data forKeyPath:@"inputMessage"];// 4.获取输出的二维码CIImage *outputImage = [filter outputImage];

2、此时输出的二维码是模糊的我们需要进行处理进行不失真的放大

/*** 根据CIImage生成指定大小的UIImage** @param image CIImage* @param size 图片宽度*/
+ (UIImage *)createHighQualityUIImageFormCIImage:(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];
}

3、到此部二维码生成功能已经完成,如果我们需要增加一个二维码名片,就需要在二维码中间覆盖一个图片(经过验证当二维码信息不是太大,名片大小适合,不会影响二维码数据读取),合成UIImage

    UIImage *qrImage = [self createHighQualityUIImageFormCIImage:outputImage withSize:width];if (!icon) {return qrImage;}CGRect rect = CGRectMake(2 * width/5, 2 * width/5, width/5, width/5);//合并UIImageUIGraphicsBeginImageContext(qrImage.size);[qrImage drawInRect:CGRectMake(0, 0, width, width)];//设置中间icon[icon drawInRect:rect];UIImage *togetherImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();

demo地址

下一张我们将介绍二维码扫描

欢迎加群交流:

iOS开发二维码生成(一)相关推荐

  1. iOS开发二维码生成和扫描

    准备工作 导入<CoreImage/CoreImage.h>,生成二维码用 导入<AVFoundation/AVFoundation.h>,读取二维码用 设置代理协议AVCap ...

  2. iOS 开发 二维码生成大全(黑白/彩色二维码和带图片的二维码)详解

    前言 扫描二维码使用的是coreImage框架,属于UIKit框架中的体系,多以使用时不用导入coreImage框架 开始之前,让我们谈谈Core Image框架中最重要的几个类: CIContext ...

  3. iOS开发-二维码扫描和应用跳转

    iOS开发-二维码扫描和应用跳转   序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...

  4. 微信开发 -- 二维码生成

    微信开发 – 二维码生成 生成二维码无非就是将一段字符串内容以某种特定的方式进行编码, 最终得到一个图片. 这里使用 C# 生成二维码我用到了 QrCode.Net 这个 Nuget 包. 这里我们创 ...

  5. iOS开发—二维码扫描-郭宏志-专题视频课程

    iOS开发-二维码扫描-3869人已学习 课程介绍         本课程由扣丁学堂教学总监郭宏志老师讲授,主要讲解了iOS开发专题中的二维码扫描这一专题,内容包含了二维码扫描中的全部知识,让学员更多 ...

  6. iOS 花式二维码生成和二维码识别

    iOS 原生的二维码识别非常之棒,反正比 ZXing 和 ZBar 效果都好些,所以以后打算尽量用原生的二维码识别,然后最近把原生的二维码生成也顺便做了一遍,并且在原有基础上加了一些样式参数,封了一个 ...

  7. Java 快速开发二维码生成服务

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1. 前言 不知道从什么 ...

  8. iOS开发 - 二维码的生成与读取

    二维码的生成 从iOS7開始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk眼下不支持64位处理器 生成二维码的步骤: 导入CoreImage框架 通过滤镜CIFilter生成二维码 二维 ...

  9. iOS 之 二维码生成与扫描(LBXScan)

    参考:https://github.com/MxABC/LBXScan 步骤如下: 1. 下载 通过参考网址进行下载. 2. 导入 导入整个LBXScan文件夹 3. 配置 在pch中加入 #impo ...

最新文章

  1. python正则表达式——re模块
  2. 实战渗透 | 向吃鸡外挂站开炮
  3. 前端学习(2845):秒杀基本介绍
  4. zen cart 操作
  5. linux下的raid及mdadm的命令详解
  6. Java Swing线程之SwingUtilities.invokeLater解释
  7. 基于微信小程序毕业论文选题系统(微信小程序毕业设计)
  8. 575万奖金!2022年数学界「诺贝尔奖」发布,拓扑学大师获奖
  9. 网络控制系统分析与设计——时延问题的网络控制系统建模
  10. SSH远程登录原理学习
  11. 热点综述 | 单细胞测序的扩展、整合与转化
  12. 双网卡 跃点_关于windows 双网卡和跃点数研究
  13. 十三年来,淘宝走过的大数据之路
  14. 以太坊编程-Geth
  15. input值变化监听事件
  16. 看完全都会了!最新Java高级面试题汇
  17. 怎样快速创建淘宝店铺app,手机店铺app?
  18. Vue教程|vue3.0入门到精通,持续更新
  19. OCR表格识别—企业应用的技术新秀
  20. abp mysql 出错_ABP记录被删除调用Repository.Get报错

热门文章

  1. matlab 陷波器,陷波滤波器—matlab实现
  2. cocos2d-x的初步学习二十一之iosandroid跨平台环境配置
  3. Some Thoughts after Reading ”How Does the Rabbit Eat the Wolf ”
  4. 说说测试环境、预发布环境、生产环境
  5. 纸质文件如何批量转换成可编辑word格式
  6. 微软我的世界1.6服务器,我的世界1.7.2服务器微软
  7. Python 信号分析——小波变换
  8. 短视频程序源码,python实时在线画曲线(附代码)
  9. app 审核被拒 的原因 搜罗
  10. 看了phpchina论坛,感觉快崩溃