iOS开发之----生成二维码

- (void)viewDidLoad {
    [super viewDidLoad];

    /*
     注意:
     1.生成二维码时, 不建议让二维码保存过多数据, 因为数据越多, 那么二维码就越密集,那么扫描起来就越困难
     2.二维码有三个定位点, 着三个定位点不能被遮挡, 否则扫描不出来
     3.二维码即便缺失一部分也能正常扫描出结果, 但是需要注意, 这个缺失的范围是由限制的, 如果太多那么也扫面不出来
     */
    // 1.创建滤镜
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    // 2.还原滤镜默认属性
    [filter setDefaults];
    // 3.将需要生成二维码的数据转换为二进制
    NSData *data = [@"123" dataUsingEncoding:NSUTF8StringEncoding];
    // 4.给滤镜设置数据
    [filter setValue:data forKeyPath:@"inputMessage"];
    // 5.生成图片
    CIImage *qrcodeImage =  [filter outputImage];

    // 6.显示图片
//    self.qrcodeImageView.image = [UIImage imageWithCIImage:qrcodeImage];
//    self.qrcodeImageView.image = [self createNonInterpolatedUIImageFormCIImage:qrcodeImage withSize:600];

    UIImage *bg = [self createNonInterpolatedUIImageFormCIImage:qrcodeImage withSize:600];
    UIImage *icon = [UIImage imageNamed:@"icon"];
    self.qrcodeImageView.image = [self creteImageWithBg:bg icon:icon];
}

- (UIImage *)creteImageWithBg:(UIImage *)bg icon:(UIImage *)icon
{
    // 1.创建图形上下文
    UIGraphicsBeginImageContextWithOptions(bg.size, YES, 0.0);
    // 2.绘制背景
    [bg drawInRect:CGRectMake(0, 0, bg.size.width, bg.size.height)];
    // 3.绘制图标
    CGFloat iconW = 60;
    CGFloat iconH = 60;
    CGFloat iconX = (bg.size.width - iconW) * 0.5;
    CGFloat iconY = (bg.size.height - iconH) * 0.5;
    [icon drawInRect:CGRectMake(iconX, iconY, iconW, iconH)];
    // 4.取出图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    // 5.关闭上下文
    UIGraphicsEndImageContext();

    // 5.返回图片
    return newImage;
}

/**
 *  根据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];
}
时间: 2024-09-30 14:42:26

iOS开发之----生成二维码的相关文章

iOS开发-定制多样式二维码

iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常见的二维码功能包括信息获取.网站跳转.电商交易.手机支付等等,其拥有密度小.信息容量大.容错能力强.成本低.制作难度低等优点.在移动开发中,二维码的地位也越来越重要,掌握二维码的基本操作是重要的本领之一. 在iOS7之后,苹果自身集成了二维码的生成和读取功能.生成二维码包括以下步骤 1.导入CoreIm

Android应用开发:生成二维码

二维码这个东西自从出来后就一直流行到现在,无论走到哪里,二维码都可能出现在你的眼前.现在智能手机基本上都有扫一扫功能,扫的就是二维码.那我们怎么样在手机上生成个自己的二维码呢?Android开发中生成二维码不难,用Google ZXing生成二维码很简单,下面我们就简单操作一直,把最主要的代码贴出来,还请大家多指教! 第一步: 确定我们二维码的位置,即是在我们应用的哪个页面的哪个位置,简单讲就是用一个ImageView把二维码展示出来,我们就把二维码展示在下面布局activity_qr_layo

iOS中如何生成二维码

首先导入框架 然后通过滤镜CIFiter生成二维码 #import <CoreImage/CoreImage.h> /** *  生成二维码 */ - (void)creat { //1.创建过滤对象 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //2.设置相关属性 [filter setDefaults]; //3.设置输入数据 NSString *inputData = @&quo

iOS开发——高级篇——二维码的生产和读取

一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤:导入CoreImage框架通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码只能放数字):纯文本名片URL // 1. 实例化二维码滤镜 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 2. 恢复滤镜的默认属性 [filter setDefaults];

ios开发之----扫描二维码、条形码

1.搭建扫描二维码的界面.可采用storyboard来搭建 2.创建对象的控制器类来管理二维码的扫描 3.在这个类中导入 #import <AVFoundation/AVFoundation.h> 框架 4.在viewDidLoad中调用 1 [self setUpQrcode]; 5.实现上面的方法 - (void)setUpQrcode { // 1.获取输入设备 AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWi

IOS开发技巧快速生成二维码

随着移动互联网的发展,二维码应用非常普遍,各大商场,饭店,水果店 基本都有二维码的身影,那么ios中怎么生成二维码呢? 下面的的程序演示了快速生成二维码的方法: 在ios里面要生成二维码,需要借助一个框架:#import <CoreImage/CoreImage.h>  所有首先我们需要在我们的项目中引入这个框架 下面是核心代码: 准备工作:首先在storyboard里面添加一个UIImageView 然后脱线 到控制器里面 起名为imageView 然后再控制器的viewDidload里面写

ios如何生成二维码

ios 7以后 系统为我们集成了生成二维码和读取功能,我们可以使用系统自带的框架 来进行二维码的相关操作. 框架CoreImage框架(该框架可以做毛玻璃效果),通过滤镜CIFilter生成二维码 . 生成二维码步骤: 包含库头文件 import <CoreImage/coreImage.h> 1, 创建过滤器 CIFilter *filter = [CIFilter  filterWithName:@"CIQRCodeGenerator"]; 2,  恢复默认设置 [fi

自己开发chrome插件生成二维码

摘要: 最近在开发微信项目时,需要在微信调试,所以经常会在微信中输入本地服务地址,输入起来特别麻烦,所以自己就想了想微信中的扫一扫,然后开发了这款chrome插件,将当前url生成二维码,用微信扫一扫就可以看效果了.在公司里面已经使用起来了,屡试不爽. 代码地址:https://github.com/baixuexiyang/qrcode 欢迎star和fork

iOS中 扫描二维码/生成二维码详解 韩俊强的博客

最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[SecondViewController new]]; 每日更新关注:http://weibo.com/hanjunqi