1. 生成二维码
iOS生成二维码很简单,直接使用CIFilter就可生成二维码:
- (void)createQrCode:(NSString *)informationString {
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
NSData *data = [informationString dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKey:@"inputMessage"];
CIImage *outputImage = [filter outputImage];
//self.qrCodeImageView.image = [UIImage imageWithCIImage:outputImage];
[self sharpenQrCodeIamge:outputImage];
}
但是此时生成的二维码比较模糊,这是因为生成的二维码为27*27的,而我们将其显示时,将其放大了。需要将其转换一下即可:
//清晰化生成的二维码
- (void)sharpenQrCodeIamge:(CIImage *)image {
CGFloat scaleX = self.qrCodeImageView.frame.size.width / image.extent.size.width;
CGFloat scaleY = self.qrCodeImageView.frame.size.height / image.extent.size.height;
image = [image imageByApplyingTransform:CGAffineTransformMakeScale(scaleX, scaleY)];
self.qrCodeImageView.image = [UIImage imageWithCIImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
}
2. 在二维码中间加入logo图像
添加logo图像只需将二维码图像和logo图像先后画入即可。在开启context时,scale必须是mainScreen的scale,否则新生成的二维码会很模糊:
- (UIImage *)insertLogoInQrCodeImage:(UIImage *)qrCodeImage logoImage:(UIImage *)logoImage {
//使用mainScreen的scale,否则会模糊
UIGraphicsBeginImageContextWithOptions(qrCodeImage.size, NO, [[UIScreen mainScreen] scale]);
[qrCodeImage drawInRect:CGRectMake(0, 0, qrCodeImage.size.width, qrCodeImage.size.height)];
CGFloat logoImageX = (qrCodeImage.size.width - 20) / 2;
CGFloat logoImageY = (qrCodeImage.size.height - 20) / 2;
CGFloat logoImageWidth = 20;
CGFloat logoImageHeight = 20;
[logoImage drawInRect:CGRectMake(logoImageX, logoImageY, logoImageWidth, logoImageHeight)];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImage;
}