iOS開發(fā)生成二維碼圖片(附中間帶有小圖標二維碼)
更新時間:2017年10月08日 07:58:47 作者:小圭哥
這篇文章主要介紹了iOS開發(fā)生成二維碼圖片(附中間帶有小圖標二維碼)的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
生成二維碼圖片也是項目中常用到的,二維碼的掃描Git上有很多好用的,這里主要說下二維碼的生成
1.普通二維碼
1.1 方法
/** 生成二維碼 QRStering:字符串 imageFloat:二維碼圖片大小 */ + (UIImage *)createQRCodeWithString:(NSString *)QRStering withImgSize:(CGFloat)imageFloat;
1.2 方法實現(xiàn)
/** 生成二維碼 QRStering:字符串 imageFloat:二維碼圖片大小 */ + (UIImage *)createQRCodeWithString:(NSString *)QRString withImgSize:(CGFloat)imageFloat{ CIFilter *filter = [CIFilter filterWithName:@"XiaoGuiGe"]; [filter setDefaults]; NSString *getString = QRString; NSData *dataString = [getString dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:dataString forKey:@"inputMessage"]; ///獲取濾鏡輸出的圖像 CIImage *outImage = [filter outputImage]; UIImage *imageV = [self imageWithImageSize:imageFloat withCIIImage:outImage]; //返回二維碼圖像 return imageV; }
2.中間帶有小圖標的二維碼
2.1 方法
/** 生成二維碼(中間有小圖片) QRStering:字符串 centerImage:二維碼中間的image對象 */ + (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage;
2.2 方法實現(xiàn)
/** 生成二維碼(中間有小圖片) QRStering:所需字符串 centerImage:二維碼中間的image對象 */ + (UIImage *)createImgQRCodeWithString:(NSString *)QRString centerImage:(UIImage *)centerImage{ // 創(chuàng)建濾鏡對象 CIFilter *filter = [CIFilter filterWithName:@"XiaoGuiGe"]; // 恢復濾鏡的默認屬性 [filter setDefaults]; // 將字符串轉(zhuǎn)換成 NSdata NSData *dataString = [QRString dataUsingEncoding:NSUTF8StringEncoding]; // 設置過濾器的輸入值, KVC賦值 [filter setValue:dataString forKey:@"inputMessage"]; // 獲得濾鏡輸出的圖像 CIImage *outImage = [filter outputImage]; // 圖片小于(27,27),我們需要放大 outImage = [outImage imageByApplyingTransform:CGAffineTransformMakeScale(20, 20)]; // 將CIImage類型轉(zhuǎn)成UIImage類型 UIImage *startImage = [UIImage imageWithCIImage:outImage]; // 開啟繪圖, 獲取圖形上下文 UIGraphicsBeginImageContext(startImage.size); // 把二維碼圖片畫上去 (這里是以圖形上下文, 左上角為(0,0)點 [startImage drawInRect:CGRectMake(0, 0, startImage.size.width, startImage.size.height)]; // 再把小圖片畫上去 CGFloat icon_imageW = 200; CGFloat icon_imageH = icon_imageW; CGFloat icon_imageX = (startImage.size.width - icon_imageW) * 0.5; CGFloat icon_imageY = (startImage.size.height - icon_imageH) * 0.5; [centerImage drawInRect:CGRectMake(icon_imageX, icon_imageY, icon_imageW, icon_imageH)]; // 獲取當前畫得的這張圖片 UIImage *qrImage = UIGraphicsGetImageFromCurrentImageContext(); // 關(guān)閉圖形上下文 UIGraphicsEndImageContext(); //返回二維碼圖像 return qrImage; }
附加方法
/** 將CIImage轉(zhuǎn)換成UIImage 并放大(內(nèi)部轉(zhuǎn)換使用)*/ + (UIImage *)imageWithImageSize:(CGFloat)size withCIIImage:(CIImage *)ciiImage{ CGRect extent = CGRectIntegral(ciiImage.extent); CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent)); // 1.創(chuàng)建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:ciiImage 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]; }
總結(jié)
以上所述是小編給大家介紹的iOS開發(fā)生成二維碼圖片(附中間帶有小圖標二維碼),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
相關(guān)文章
iOS App中UILabel的自定義及在Auto Layout中的使用
這篇文章主要介紹了iOS App中UILabel的自定義及在Auto Layout中的使用,示例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下2016-03-03iOS開發(fā)中使用UIScrollView實現(xiàn)無限循環(huán)的圖片瀏覽器
這篇文章主要介紹了iOS開發(fā)中使用UIScrollView實現(xiàn)無限循環(huán)的圖片瀏覽器的方法,感興趣的小伙伴們可以參考一下2016-03-03iOS自定義UICollectionViewFlowLayout實現(xiàn)圖片瀏覽效果
這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現(xiàn)圖片瀏覽效果的相關(guān)資料,需要的朋友可以參考下2016-03-03iOS開發(fā)中Date Picker和UITool Bar控件的使用簡介
這篇文章主要介紹了iOS開發(fā)中Date Picker和UITool Bar控件的使用簡介,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01