从github下载的qrencode没有QRCodeGenerator文件,需要引入
// // QR Code Generator - generates UIImage from NSString // // Copyright (C) 2012 http://moqod.com Andrew Kopanev <andrew@moqod.com> // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is furnished to do so, // subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface QRCodeGenerator : NSObject + (UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)size; @end
// // QR Code Generator - generates UIImage from NSString // // Copyright (C) 2012 http://moqod.com Andrew Kopanev <andrew@moqod.com> // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is furnished to do so, // subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. // #import "QRCodeGenerator.h" #import "qrencode.h" enum { qr_margin = }; @implementation QRCodeGenerator + (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size { unsigned ; int width; data = code->data; width = code->width; float zoom = (double)size / (code->width + 2.0 * qr_margin); CGRect rectDraw = CGRectMake(, , zoom, zoom); // draw CGContextSetFillColor(ctx, CGColorGetComponents([UIColor blackColor].CGColor)); ; i < width; ++i) { ; j < width; ++j) { ) { rectDraw.origin = CGPointMake((j + qr_margin) * zoom,(i + qr_margin) * zoom); CGContextAddRect(ctx, rectDraw); } ++data; } } CGContextFillPath(ctx); } + (UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)size { if (![string length]) { return nil; } QRcode *code = QRcode_encodeString([, QR_ECLEVEL_L, QR_MODE_8, ); if (!code) { return nil; } // create context CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef ctx = CGBitmapContextCreate(, size, size, , size * , colorSpace, kCGImageAlphaPremultipliedLast); CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(, -size); CGAffineTransform scaleTransform = CGAffineTransformMakeScale(, -); CGContextConcatCTM(ctx, CGAffineTransformConcat(translateTransform, scaleTransform)); // draw QR on this context [QRCodeGenerator drawQRCode:code context:ctx size:size]; // get image CGImageRef qrCGImage = CGBitmapContextCreateImage(ctx); UIImage * qrImage = [UIImage imageWithCGImage:qrCGImage]; // some releases CGContextRelease(ctx); CGImageRelease(qrCGImage); CGColorSpaceRelease(colorSpace); QRcode_free(code); return qrImage; } @end
在需要的文件中加入#import "QRCodeGenerator.h"即可
// // ViewController.m // qRenCode // // Created by City--Online on 15/6/9. // Copyright (c) 2015年 CYW. All rights reserved. // #import "ViewController.h" #import "QRCodeGenerator.h" @interface ViewController () @property(nonatomic,strong) UITextField *textField; @property(nonatomic,strong) UIButton *btn; @property(nonatomic,strong) UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _textField=[[UITextField alloc]initWithFrame:CGRectMake(, , , )]; _textField.borderStyle=UITextBorderStyleLine; [self.view addSubview:_textField]; _btn=[UIButton buttonWithType:UIButtonTypeSystem]; [_btn setTitle:@"生成" forState:UIControlStateNormal]; [_btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; _btn.frame=CGRectMake(, , , ); [_btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_btn]; _imgView=[[UIImageView alloc]initWithFrame:CGRectMake(, , , )]; // _imgView.backgroundColor=[UIColor blackColor]; [self.view addSubview:_imgView]; } -(void)btnClick:(id)sender { _imgView.image = [QRCodeGenerator qrImageForString:_textField.text imageSize:_imgView.bounds.size.width]; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [_textField resignFirstResponder]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
有时候想在二维码中间带个Logo,犹豫二维码有容错率,所以可以直接将图片添加上去
-(void)btnClick:(id)sender { _imgView.image = [QRCodeGenerator qrImageForString:_textField.text imageSize:_imgView.bounds.size.width]; UIImageView *img=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.jpg"]]; img.frame=CGRectMake(_imgView.bounds.size.width*/, _imgView.bounds.size.height*/, _imgView.bounds.size.width/, _imgView.bounds.size.height/); img.backgroundColor=[UIColor redColor]; [_imgView addSubview:img]; }