iOS生成二維碼

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章