美文网首页
iOS开发-生成高清二维码以及添加logo

iOS开发-生成高清二维码以及添加logo

作者: New_卡迪熊 | 来源:发表于2018-11-22 11:58 被阅读5次

    一、导入头文件

    #import<CoreImage/CoreImage.h>

    二、生成二维码

    - (UIImage *)createQRCodeWithUrl:(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];

        // 转成高清格式

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

        // 添加logo

        qrcode = [self drawImage:QLNamedImage(@"qr_logo") inImage:qrcode];

        return qrcode;

    }

    三、将二维码转成高清模式

    - (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];

    }

    四、添加logo

    - (UIImage *)drawImage:(UIImage *)newImage inImage:(UIImage *)sourceImage {

        CGSize imageSize; //画的背景 大小

        imageSize = [sourceImage size];

        UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);

        [sourceImage drawAtPoint:CGPointMake(0, 0)];

        //获得 图形上下文

        CGContextRef context=UIGraphicsGetCurrentContext();

        //画 自己想要画的内容(添加的图片)

        CGContextDrawPath(context, kCGPathStroke);

        // 注意logo的尺寸不要太大,否则可能无法识别

        CGRect rect = CGRectMake(imageSize.width / 2 - 25, imageSize.height / 2 - 25, 50, 50);

    //    CGContextAddEllipseInRect(context, rect);

        CGContextClip(context);

        [newImage drawInRect:rect];

        //返回绘制的新图形

        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        return image;

    }

    相关文章

      网友评论

          本文标题:iOS开发-生成高清二维码以及添加logo

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