zoukankan      html  css  js  c++  java
  • iOS-生成二维码图片【附中间带有小图标二维码】(QRCode)

    生成二维码图片也是项目中常用到的,二维码的扫描Git上有很多好用的,这里主要说下二维码的生成

    1.普通二维码

     方法

    /**
    
     生成二维码
    
     QRStering:字符串
    
     imageFloat:二维码图片大小
    
     */
    
    + (UIImage *)createQRCodeWithString:(NSString *)QRStering withImgSize:(CGFloat)imageFloat;

     方法实现

    /**
    
     生成二维码
    
     QRStering:字符串
    
     imageFloat:二维码图片大小
    
     */
    
    + (UIImage *)createQRCodeWithString:(NSString *)QRString withImgSize:(CGFloat)imageFloat{
    
        CIFilter *filter = [CIFilter filterWithName:@"XiaoGuiGe"];
    
        [filter setDefaults];
    
        NSString *getString = QRString;
    
        NSData *dataString = [getString dataUsingEncoding:NSUTF8StringEncoding];
    
        [filter setValue:dataString forKey:@"inputMessage"];
    
        ///获取滤镜输出的图像
    
        CIImage *outImage = [filter outputImage];
    
        UIImage *imageV = [self imageWithImageSize:imageFloat withCIIImage:outImage];
    
        //返回二维码图像
    
        return imageV;
    
    }

    2.中间带有小图标的二维码

     方法

    /**
    
     生成二维码(中间有小图片)
    
     QRStering:字符串
    
     centerImage:二维码中间的image对象
    
     */
    
    + (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage;

     方法实现

    /**
    
     生成二维码(中间有小图片)
    
     QRStering:所需字符串
    
     centerImage:二维码中间的image对象
    
     */
    
    + (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage{
    
        // 创建滤镜对象
    
        CIFilter *filter = [CIFilter filterWithName:@"XiaoGuiGe"];
    
        // 恢复滤镜的默认属性
    
        [filter setDefaults];
    
        // 将字符串转换成 NSdata
    
        NSData *dataString = [QRString dataUsingEncoding:NSUTF8StringEncoding];
    
        // 设置过滤器的输入值, KVC赋值
    
        [filter setValue:dataString forKey:@"inputMessage"];
    
        // 获得滤镜输出的图像
    
        CIImage *outImage = [filter outputImage];
    
        // 图片小于(27,27),我们需要放大
    
        outImage = [outImage imageByApplyingTransform:CGAffineTransformMakeScale(20, 20)];
    
        // 将CIImage类型转成UIImage类型
    
        UIImage *startImage = [UIImage imageWithCIImage:outImage];
    
        // 开启绘图, 获取图形上下文
    
        UIGraphicsBeginImageContext(startImage.size);
    
        
    
        // 把二维码图片画上去 (这里是以图形上下文, 左上角为(0,0)点
    
        [startImage drawInRect:CGRectMake(0, 0, startImage.size.width, startImage.size.height)];
    
        // 再把小图片画上去
    
        CGFloat icon_imageW = 200;
    
        CGFloat icon_imageH = icon_imageW;
    
        CGFloat icon_imageX = (startImage.size.width - icon_imageW) * 0.5;
    
        CGFloat icon_imageY = (startImage.size.height - icon_imageH) * 0.5;
    
        [centerImage drawInRect:CGRectMake(icon_imageX, icon_imageY, icon_imageW, icon_imageH)];
    
        // 获取当前画得的这张图片
    
        UIImage *qrImage = UIGraphicsGetImageFromCurrentImageContext();
    
        // 关闭图形上下文
    
        UIGraphicsEndImageContext();
    
        //返回二维码图像
    
        return qrImage;
    
    }

    附加方法(与上面两个方法写在同一个类)

    /** 将CIImage转换成UIImage 并放大(内部转换使用)*/
    
    + (UIImage *)imageWithImageSize:(CGFloat)size withCIIImage:(CIImage *)ciiImage{
    
        CGRect extent = CGRectIntegral(ciiImage.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:ciiImage 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];
    
    }
  • 相关阅读:
    Source Insight新建工程文件
    移植3.4.2内核之韦东山笔记
    移植最新u-boot(裁剪和修改默认参数)
    C++与C语言在结构体上的区别
    VIP之Switch
    VIP之CSC
    VIP之Scaler
    VIP之FrameBuffer
    VIP之MixerII
    VIP之Clipper
  • 原文地址:https://www.cnblogs.com/wangkejia/p/7634884.html
Copyright © 2011-2022 走看看