iOS如何生成二维码图片

发布时间:2021-08-04 12:37:19 作者:小新
来源:亿速云 阅读:167

这篇文章主要介绍了iOS如何生成二维码图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

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

感谢你能够认真阅读完这篇文章,希望小编分享的“iOS如何生成二维码图片”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

推荐阅读:
  1. 用 zxing生成二维码图片
  2. iOS图片的压缩

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ios

上一篇:Xcode9和iOS11适配和特性的示例分析

下一篇:如何解决某些HTML字符打不出来的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》