ios二维码

ios7之后系统框架已经集成二维码的生成与读取, 这使开发变得方便很多, 并且会比第三方更加效率。

系统二维码主要通过CIFilter的对象来完成

首先我们需要先导入这个类所在的框架:

#import 

生成二维码

// 生成二维码
-(UIImage *)creat2DcodeImage:(NSString *)url{
    // 1. 创建一个二维码滤镜实例(CIFilter)
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    [filter setDefaults];     // 滤镜恢复默认设置
    
    // 2. 给滤镜添加数据
    NSString *string = url;    //根据网址生成
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    // 使用KVC的方式给filter赋值
    [filter setValue:data forKeyPath:@"inputMessage"];
    
    // 3. 生成二维码
    CIImage *image = [filter outputImage];
    
    // 4. 高清处理
    UIImage *newimg = [self createNonInterpolatedUIImageFormCIImage:image withSize:130.0];
    
    // 5. 添加logo
    // 开启绘图, 获取图片 上下文<图片大小>
    UIGraphicsBeginImageContext(newimg.size);
    // 将二维码图片画上去
    [newimg drawInRect:CGRectMake(0, 0, newimg.size.width, newimg.size.height)];
    // 将小图片画上去
    UIImage *smallImage = [UIImage imageNamed:@"动画1"];
    [smallImage drawInRect:CGRectMake((newimg.size.width - 50) / 2, (newimg.size.width - 50) / 2, 50, 50)];
    // 获取最终的图片
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    // 关闭上下文
    UIGraphicsEndImageContext();
   
    return finalImage;    
}

//  注意:logo图片不能太大, 否则会导致扫描不到二维码中的信息。

生成URL的二维码

如果我们想要生成URL的二维码, 只需要把上面第2步中的string替换为一个URL字符串即可。

二维码高清处理

调用以下方法即可,其中的参数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];
}

http://www.jianshu.com/p/e8f7a257b612
http://www.cnblogs.com/QianChia/p/6213466.html *封装扫描,识别,生成
好用的第三方zxing

扫描二维码

这里提供一些参考链接文章
http://www.code4app.com/ios/%E7%B3%BB%E7%BB%9FAPI%E6%89%AB%E6%8F%8F%E4%BA%8C%E7%BB%B4%E7%A0%81/4faa917a-ea5f-11e5-b1ca-00163e0606f4

http://www.code4app.com/ios/%E5%8E%9F%E7%94%9F%E5%AE%9E%E7%8E%B0%E7%9A%84%E4%BA%8C%E7%BB%B4%E7%A0%81%E3%80%81%E6%9D%A1%E5%BD%A2%E7%A0%81%E7%9A%84%E6%89%AB%E6%8F%8F/56a0de8eb5ad2ebe118b4962

你可能感兴趣的:(ios二维码)