在上一篇中介绍了怎么生成二维码:《【iOS】CoreImage原生二维码生成(一)》。这一篇说说怎么生成带logo的二维码。
这里的思路是,在生成的二维码的中心加一个logo图片。这里的难点就是怎么在图片中加一个图片了。
效果图;
可以扫一扫的。
这个步骤:生成二维码图片--> 改变二维码图片的大小 --> 给二维码图片增加logo图片 --> 显示
下面这个方法可以解决:
图片增加水印
/** * 图片增加水印 * * @param superImage 需要增加水印的图片 * @param subImage 水印图片 * @param posRect 水印的位置 和 水印的大小 * * @return 加水印后的新图片 */ - (UIImage *)addImageToSuperImage:(UIImage *)superImage withSubImage:(UIImage *)subImage andSubImagePosition:(CGRect)posRect{ UIGraphicsBeginImageContext(superImage.size); [superImage drawInRect:CGRectMake(0, 0, superImage.size.width, superImage.size.height)]; //四个参数为水印图片的位置 [subImage drawInRect:posRect]; UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return resultingImage; }
现在logo可以添加上去了。
/** * 生成带logo的二维码 * 二维码和logo都是正方形的 * @param urlString 二维码中的链接 * @param QRCodeCGRect 二维码的CGRect * @param logoImage 二维码中的logo * @param logoImageSize logo的大小 * @param cornerRadius logo的圆角值大小 * * @return 生成的二维码 */ + (HGDQQRCodeView *)creatQRCodeWithURLString:(NSString *)urlString superView:(UIView *)superView logoImage:(UIImage *)logoImage logoImageSize:(CGSize)logoImageSize logoImageWithCornerRadius:(CGFloat)cornerRadius{ // 先移除子视图 HGDQQRCodeView *oldQRCodeView = [superView viewWithTag:123]; [oldQRCodeView removeFromSuperview]; HGDQQRCodeView *QRCodeView = [[HGDQQRCodeView alloc] init]; QRCodeView.tag = 123; QRCodeView.frame = CGRectMake(0, 0, superView.frame.size.width, superView.frame.size.height); CIImage *ciImage = [QRCodeView creatQRcodeWithUrlstring:urlString]; // 生成二维码 UIImage *qrImage = [QRCodeView changeImageSizeWithCIImage:ciImage andSize:superView.frame.size.width]; // 改变二维码的大小 if (logoImage != nil) { if (cornerRadius < 0) { cornerRadius = 0; NSLog(@"cornerRadius 不能小于0"); } qrImage = [QRCodeView addImageToSuperImage:qrImage withSubImage:[QRCodeView imageWithCornerRadius:cornerRadius image:logoImage] andSubImagePosition:CGRectMake((superView.frame.size.width - logoImageSize.width)/2, (superView.frame.size.height - logoImageSize.height)/2, logoImageSize.width, logoImageSize.height)]; // 增加logo } QRCodeView.layer.contents = (__bridge id)qrImage.CGImage; [superView addSubview:QRCodeView]; return QRCodeView; }使用这个类方法(加方法)就可以一个方法生成带logo的二维码了。
怎么使用呢?
1.在VC中包含头文件
#import "ViewController.h" #import "HGDQQRCodeView.h"2.创建一个试图 显示二维码
3.事件触发
/** * 生成二维码 * * @param sender sender description */ - (IBAction)btnClick:(id)sender { [HGDQQRCodeView creatQRCodeWithURLString:@"http://blog.csdn.net/zhuming3834" superView:self.QRView logoImage:[UIImage imageNamed:@"logo"] logoImageSize:CGSizeMake(40, 40) logoImageWithCornerRadius:0]; }至此生成的二维码就可以显示出来了。
github代码地址:请点击我