二維碼的生成

? ? ? ?現(xiàn)在大多數(shù)的App都使用到二維碼钧大,所以就需要我們?cè)贏pp開發(fā)的時(shí)候畅形,加入這個(gè)功能阅懦。其實(shí)蘋果官方也提供了這樣的框架<CoreImage/CoreImage.h>,這個(gè)框架是需要手動(dòng)添加的

1. 導(dǎo)入庫(kù)后幌绍,我們就可以對(duì)象了

// 創(chuàng)建過(guò)濾對(duì)象? CIQRCodeGenerator 必須這樣寫? 才可以創(chuàng)建出來(lái)二維碼(意思就是我要?jiǎng)?chuàng)建的是二維碼修械,個(gè)人理解趾牧,英語(yǔ)水平有限)

CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

2.這個(gè)對(duì)象是需要初始化后 ,要恢復(fù)下他的默認(rèn)設(shè)置 (也就一句代碼)

// 恢復(fù)默認(rèn)

[filter setDefaults];

3.這樣對(duì)象我們就可以設(shè)置好了 現(xiàn)在我們改設(shè)置下要生成的內(nèi)容了 (如果你設(shè)置的是個(gè)網(wǎng)址肯污,也不需要轉(zhuǎn)化為NSURL的翘单,直接設(shè)置為NSString就可以,可以自動(dòng)轉(zhuǎn)化的)

// 3.0 給過(guò)濾器添加數(shù)據(jù)? 如果想設(shè)置網(wǎng)址時(shí)? 直接將網(wǎng)址設(shè)置為NSString

//? ? NSString *dataString = @"小愛八點(diǎn)半";

NSString *dataString = @"http://www.baidu.com";

NSData *data =[dataString dataUsingEncoding:4];// 這個(gè)就是轉(zhuǎn)化為UFT-8

// 利用KVC將數(shù)據(jù)設(shè)置給過(guò)濾器? inputMessage也必須這樣寫

[filter setValue:data forKeyPath:@"inputMessage"];

在此的過(guò)濾對(duì)象設(shè)置些 ?二維碼的顏色

UIColor *onColor = [UIColor blackColor];// 繪制的顏色4.數(shù)據(jù)已經(jīng)設(shè)置好了蹦渣,也該生成最后的二維碼了? 圖片生成了哄芜,

UIColor *offColor = [UIColor whiteColor];// 空白的顏色

//上色

CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor" keysAndValues:@"inputImage",qrFilter.outputImage,@"inputColor0",[CIColor colorWithCGColor:onColor.CGColor],@"inputColor1",[CIColor colorWithCGColor:offColor.CGColor],nil];

// 獲取二維碼

CIImage * ciimage =[colorFilter outputImage];

5。但是該注意了柬唯,他是CIImage喲 ?其實(shí)也沒(méi)啥難度的认臊,也就是一句代碼就可以的

self.imageView.image = [UIImage imageWithCIImage:ciimage];

這樣我們的二維碼就能夠現(xiàn)實(shí)出來(lái)了锄奢,但是顯示出來(lái)不是很清楚的(這就是蘋果的坑爹之處)失晴,如果你們的策劃不是很嚴(yán)格的話,你就可以萬(wàn)事大吉拘央,此功能就完成涂屁。

下面再教大家一個(gè)個(gè)方法,生成個(gè)清晰的二維碼灰伟,其實(shí)就是拿著咱們的CIImage對(duì)象利用圖形上下文將圖形繪制一下

/**

*? 根據(jù)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.創(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: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];

}


二維碼的掃描

1.二維碼的掃描就需要導(dǎo)入<AVFoundation/AVFoundation.h>框架?

// 創(chuàng)建撲捉對(duì)象? Capture Session? 捕獲會(huì)話

AVCaptureSession *session =[[AVCaptureSession alloc]init];

self.session = session;

2.創(chuàng)建輸入的設(shè)備 ?也就是掃描設(shè)備

// 2.0 設(shè)置輸入設(shè)備

/**

*? 創(chuàng)建輸入設(shè)備? 為攝像頭輸入 Video錄像

*/

AVCaptureDevice? *device =[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

AVCaptureDeviceInput *input =[AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

// 添加輸入設(shè)備

[session addInput:input];

3.0 設(shè)置輸出的方式 ?(也就是你要掃描什么樣的內(nèi)容)

// 3.0 設(shè)置輸出方式

AVCaptureMetadataOutput *outPut =[[AVCaptureMetadataOutput alloc]init];

// 添加輸入方式的代理方法 獲取掃描的數(shù)據(jù)? queue? 在哪個(gè)線程里面獲取掃描的對(duì)象

[outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

[session addOutput:outPut];

/**

*? 設(shè)置掃描的是哪個(gè)數(shù)據(jù)? AVMetadataObjectTypeQRCode? 二維碼數(shù)據(jù)

*/

[outPut setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

4.0 創(chuàng)建個(gè)layer 就是掃描的區(qū)域

// 4.0? 添加一個(gè)顯示的layer

AVCaptureVideoPreviewLayer *layer =[[AVCaptureVideoPreviewLayer alloc]initWithSession:session];

// 掃描框在哪

layer.frame = self.view.bounds;

[self.view.layer addSublayer:layer];

self.layer = layer;

//? 5.0 開始掃描

[session startRunning];

5.0 最后就的在輸出內(nèi)容方式的代理方法里面截取到程序掃描的內(nèi)容

#pragma mark 代理的實(shí)現(xiàn)

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection

{

if (metadataObjects.count > 0) {

// 1.0 獲取數(shù)據(jù)

AVMetadataMachineReadableCodeObject *object =[metadataObjects lastObject];

NSLog(@"%@",object.stringValue);// 如果獲取的是個(gè)網(wǎng)址拆又,直接會(huì)跳轉(zhuǎn)到網(wǎng)址的地址頁(yè)面

//2.0 停止掃描

[self.session stopRunning];

// 3.0 移除掃描圖層

[self.layer removeFromSuperlayer];

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帖族,更是在濱河造成了極大的恐慌栈源,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竖般,死亡現(xiàn)場(chǎng)離奇詭異甚垦,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)捻激,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門制轰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人胞谭,你說(shuō)我怎么就攤上這事垃杖。” “怎么了丈屹?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵调俘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我旺垒,道長(zhǎng)彩库,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任先蒋,我火速辦了婚禮骇钦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竞漾。我一直安慰自己眯搭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布业岁。 她就那樣靜靜地躺著鳞仙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笔时。 梳的紋絲不亂的頭發(fā)上棍好,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音允耿,去河邊找鬼借笙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛较锡,可吹牛的內(nèi)容都是我干的提澎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼念链,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起掂墓,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谦纱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后君编,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跨嘉,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年吃嘿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祠乃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兑燥,死狀恐怖亮瓷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情降瞳,我是刑警寧澤嘱支,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站挣饥,受9級(jí)特大地震影響除师,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扔枫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一汛聚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧短荐,春花似錦倚舀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至讶踪,卻和暖如春芯侥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乳讥。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工柱查, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人云石。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓唉工,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親汹忠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淋硝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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