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];
// 將字符串轉換成 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類型轉成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();
// 關閉圖形上下文
UIGraphicsEndImageContext();
//返回二維碼圖像
return qrImage;
}
附加方法
/** 將CIImage轉換成UIImage 并放大(內部轉換使用)*/
+ (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];
}
總結
以上所述是小編給大家介紹的iOS開發(fā)生成二維碼圖片(附中間帶有小圖標二維碼),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
相關文章
iOS開發(fā)之使用Storyboard預覽UI在不同屏幕上的運行效果
使用Storyboard做開發(fā)效率非常高,為了防止在團隊中發(fā)生沖突,采取的解決辦法是負責UI開發(fā)的同事最好每人維護一個Storyboard, 公用的組件使用輕量級的xib或者純代碼來實現(xiàn),下面小編就給大家介紹如何使用Storyboard預覽UI在不同屏幕上的運行效果,需要的朋友可以參考下2015-08-08
iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問題的解決
iOS10的到來,帶來了條幅和鎖屏界面的重新設計,美觀又好看,再加上抬腕喚醒功能,查看需要的信息確實更便捷了,還能快捷回復一些通知,十分輕松,但同樣有問題,下面這篇文章主要給大家介紹了關于iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問題的解決方法,需要的朋友可以參考下。2017-10-10
iOS Swift 值類型與引用類型使用區(qū)別基礎詳解
這篇文章主要為大家介紹了iOS Swift 值類型與引用類型使用區(qū)別基礎詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
iOS 11更新后及iPhone X推出后工程中遇到的問題及適配方法
這篇文章主要介紹了iOS 11更新后及iPhone X推出后工程中遇到的問題及適配,需要的朋友可以參考下2017-10-10

