標籤:
隨著移動互連網的發展,二維碼應用非常普遍,各大商場,飯店,水果店 基本都有二維碼的身影,那麼ios中怎麼產生二維碼呢? 下面的的程式示範了快速產生二維碼的方法:
在ios裡面要產生二維碼,需要藉助一個架構:#import <CoreImage/CoreImage.h> 所有首先我們需要在我們的項目中引入這個架構
下面是核心代碼:
準備工作:首先在storyboard裡面添加一個UIImageView 然後脫線 到控制器裡面 起名為imageView 然後再控制器的viewDidload裡面寫上如下代碼即可產生二維碼:
//建立過濾器 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //恢複預設設定 [filter setDefaults]; //添加資料 NSString *str = @"http://www.xianhua.cn"; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:data forKeyPath:@"inputMessage"]; //輸出圖片 CIImage *image = [filter outputImage]; //顯示圖片 self.imageView.image = [UIImage imageWithCIImage:image];
運行效果如下:
通過上面的簡單代碼就能夠產生一個二維碼了,但是 細心的你 可能會發現 我們通過上面的代碼產生的二維碼 很模糊,給使用者體驗不是很好,這個時候 我們就需要對圖片進行處理了
這裡提供一個方法,是採用位元影像的方式對圖片進行處理的 如果你看不懂沒關係 只需要將其放入到你的項目中即可了,代碼如下:
/** * 根據CIImage產生指定大小的UIImage * * @param image CIImage * @param size 圖片寬度 */- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size{ CGRect extent = CGRectIntegral(image.extent); CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent)); // 1.建立bitmap; size_t width = CGRectGetWidth(extent) * scale; size_t height = CGRectGetHeight(extent) * scale; CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray(); CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone); CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef bitmapImage = [context createCGImage:image fromRect:extent]; CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone); CGContextScaleCTM(bitmapRef, scale, scale); CGContextDrawImage(bitmapRef, extent, bitmapImage); // 2.儲存bitmap到圖片 CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef); CGContextRelease(bitmapRef); CGImageRelease(bitmapImage); return [UIImage imageWithCGImage:scaledImage];}
有了這個方法之後,接下來我們只需要對我們剛開始的代碼稍稍做一點修改就大工告成了 修改如下:
就修改了一行代碼,然後引入了處理圖片的一個方法,允許效果如下:
看到了吧,是不是比剛開始清晰多了哈, 好了 關於二維碼的產生 就講到這裡了 下一節 我們介紹下 二維碼的掃描
IOS開發技巧快速產生二維碼