在上一篇中介绍了怎么生成二维码:《【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代码地址:请点击我