iOS开发-生成二维码图片【附中间带有小图标二维码】(QRCode)_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS开发-生成二维码图片【附中间带有小图标二维码】(QRCode)

iOS开发-生成二维码图片【附中间带有小图标二维码】(QRCode)

 2017/10/7 16:43:07  小圭哥  程序员俱乐部  我要评论(0)
  • 摘要:生成二维码图片也是项目中常用到的,二维码的扫描Git上有很多好用的,这里主要说下二维码的生成1.普通二维码1.1方法/**生成二维码QRStering:字符串imageFloat:二维码图片大小*/+(UIImage*)createQRCodeWithString:(NSString*)QRSteringwithImgSize:(CGFloat)imageFloat;1.2方法实现/**生成二维码QRStering:字符串imageFloat:二维码图片大小*/+(UIImage*
  • 标签:图标 图片 iOS 开发 二维码

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

1.普通二维码

1.1 方法

/**

 生成二维码

 QRStering:字符串

 imageFloat:二维码图片大小

 */

+ (UIImage *)createQRCodeWithString:(NSString *)QRStering withImgSize:(CGFloat)imageFloat;

1.2 方法实现

/**

 生成二维码

 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.中间带有小图标的二维码

2.1 方法

/**

 生成二维码(中间有小图片)

 QRStering:字符串

 centerImage:二维码中间的image对象

 */

+ (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage;

2.2 方法实现

/**

 生成二维码(中间有小图片)

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

}

发表评论
用户名: 匿名