美文网首页
iOS 二维码的生成

iOS 二维码的生成

作者: 飞鱼_T | 来源:发表于2016-06-02 20:37 被阅读64次

    #import <CoreImage/CoreImage.h>

    /** 生成二维码*/

    - (void)set2DimensionalBarCode:(UIImageView *)imgView

    {

    // 1.实例化二维码滤镜

    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

    // 2.恢复滤镜的默认属性

    [filter setDefaults];

    // 3.二维码信息

    //NSString *str = @"哎呀我去"; // 展示一串文字

    NSString *str = @"http://www.baidu.com"; // 直接打开网页

    // 4.将字符串转成二进制数据

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    // 5.通过KVC设置滤镜inputMessage数据

    [filter setValue:data forKey:@"inputMessage"];

    // 6.获取滤镜输出的图像

    CIImage *outputImage = [filter outputImage];

    // 7.将CIImage转成UIImage

    //系统默认获取到的二维码图片不太清晰,可以利用这个方法,获取指定大小(传入的size参数值)的二维码图片

    UIImage *image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200];

    // 8.展示二维码

    imgView.image = image;

    }

    /**

    *  根据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];

    }

    转自 YotrolZ  

    相关文章

      网友评论

          本文标题:iOS 二维码的生成

          本文链接:https://www.haomeiwen.com/subject/kfukdttx.html