iOS 生成二維碼

通過濾鏡CIFilter生成二維碼

/**
 根據(jù)字符串生成二維碼
 
 @param string  普通字符串或URL字符串
 @param size    二維碼圖片大小
 @return        生成的二維碼圖片
 */
+ (UIImage *)createQRCodeImageWithString:(NSString *)string imageSize:(CGSize)size {
    //實例化濾鏡,這里的@"CIQRCodeGenerator"是固定的
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    //恢復(fù)濾鏡的默認屬性(因為濾鏡可能保存上一次的屬性)
    [filter setDefaults];
    //將字符串轉(zhuǎn)換為NSData
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    //通過KVO設(shè)置濾鏡inputMessage數(shù)據(jù)
    [filter setValue:data forKey:@"inputMessage"];
    
    //獲取濾鏡圖像(此時獲取到的圖像比較模糊)
    CIImage *outputImage = [filter outputImage];
    
    //返回高清二維碼圖片
    return [self createHDQRCodeImageWithCIImage:outputImage size:size];
}

/**
 根據(jù)濾鏡圖像創(chuàng)建高清二維碼圖片

 @param cImage  濾鏡圖像
 @param size    二維碼圖片大小
 @return        生成的高清二維碼圖片
 */
+ (UIImage *)createHDQRCodeImageWithCIImage:(CIImage *)cImage size:(CGSize)size {
    CGRect extentRect = CGRectIntegral(cImage.extent);
    CGFloat scale = [UIScreen mainScreen].scale;
    
    size_t width = CGRectGetWidth(extentRect) * scale;
    size_t height = CGRectGetHeight(extentRect) * scale;
    
    //創(chuàng)建bitmap
    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef bitmapImage = [context createCGImage:cImage fromRect:extentRect];
    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
    CGContextScaleCTM(bitmapRef, scale, scale);
    CGContextDrawImage(bitmapRef, extentRect, bitmapImage);
    
    //保存bitmap圖片
    CGImageRef scaleImage = CGBitmapContextCreateImage(bitmapRef);
    CGContextRelease(bitmapRef);
    CGImageRelease(bitmapImage);
    
    return [UIImage imageWithCGImage:scaleImage];
}
  • 調(diào)用示例:
//    NSString *testString = @"生成二維碼";
    NSString *testString = @"https://github.com/WSongLin";
    
    self.imageView.image = [UIImage createQRCodeImageWithString:testString imageSize:CGSizeMake(180.f, 180.f)];

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末废登,一起剝皮案震驚了整個濱河市翠忠,隨后出現(xiàn)的幾起案子喇闸,更是在濱河造成了極大的恐慌钾埂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砾医,死亡現(xiàn)場離奇詭異泼掠,居然都是意外死亡怔软,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門择镇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挡逼,“玉大人,你說我怎么就攤上這事腻豌〖铱玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵吝梅,是天一觀的道長虱疏。 經(jīng)常有香客問我,道長苏携,這世上最難降的妖魔是什么做瞪? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮右冻,結(jié)果婚禮上装蓬,老公的妹妹穿的比我還像新娘。我一直安慰自己国旷,他們只是感情好矛物,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跪但,像睡著了一般履羞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屡久,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天忆首,我揣著相機與錄音,去河邊找鬼被环。 笑死糙及,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筛欢。 我是一名探鬼主播浸锨,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼版姑!你這毒婦竟也來了柱搜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剥险,失蹤者是張志新(化名)和其女友劉穎聪蘸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡健爬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年控乾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娜遵。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜕衡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出设拟,到底是詐尸還是另有隱情衷咽,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布蒜绽,位于F島的核電站,受9級特大地震影響桶现,放射性物質(zhì)發(fā)生泄漏躲雅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一骡和、第九天 我趴在偏房一處隱蔽的房頂上張望相赁。 院中可真熱鬧,春花似錦慰于、人聲如沸钮科。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绵脯。三九已至,卻和暖如春休里,著一層夾襖步出監(jiān)牢的瞬間蛆挫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工妙黍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悴侵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓拭嫁,卻偏偏與公主長得像可免,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子做粤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 首先先了解一下二維碼的容錯(例如微信的二維碼中間附帶頭像圖片): 二維碼都有一定的糾錯浇借,就是有部分污損或者破損都沒...
    零零貳叁閱讀 1,177評論 0 0
  • 這里我是將生成好的二維碼分享到微信好友,并通過識別發(fā)送的二維碼跳轉(zhuǎn)到app store 將圖1的文件驮宴,導(dǎo)入自己的工...
    肉肉要次肉閱讀 2,258評論 0 0
  • //聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄 #import"SHCodeTableViewCe...
    石虎132閱讀 656評論 0 17
  • CIFilter用來創(chuàng)建圖像濾鏡逮刨,一般通過kCIInputImageKey提供輸入圖像,通過outputImage...
    惡趣味魚閱讀 508評論 0 1
  • //生成二維碼 - (void)createCIImageWithText:(NSString*)text { C...
    靜花寒閱讀 641評論 1 7