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