iOS7之后系統(tǒng)自帶生成二維碼

先在控制器里面創(chuàng)建一個UIimageView來充當二維碼的容器

CGFloatqrImageViewWH =SP(190);

CGFloatqrImageViewX =0.5*(SCREEN_WIDTH- qrImageViewWH);

UIImageView* qrImageView = [[UIImageViewalloc]initWithFrame:CGRectMake(qrImageViewX, iconImageView.bottom+SP(35), qrImageViewWH, qrImageViewWH)];

qrImageView.backgroundColor= [UIColorrandomColor];

[self.viewaddSubview:qrImageView];

self.qrImageView= qrImageView;//在此記得設(shè)置為成員變量

然后調(diào)用生成二維碼的方法

#pragma mark - creatQR

- (void)creatQR

{

//創(chuàng)建過濾器

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

//恢復(fù)默認

[filtersetDefaults];

//給過濾器添加數(shù)據(jù)http://www.txship.com/

NSString* dataStr =@"http://www.txship.com";

NSData* data = [dataStrdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES];

//通過KVO設(shè)置濾鏡inputMessage數(shù)據(jù)

[filtersetValue:dataforKey:@"inputMessage"];

//獲取輸出的二維碼

CIImage* qrImage = [filteroutputImage];

//將CIImage裝換為UIimage并放大顯示

self.qrImageView.image= [self createNonInterpolatedUIImageFormCIImage:qrImage withSize:SP(190)];

}

這樣就可以生成一個二維碼了瘫俊,但是這樣生成的二維碼不清晰

可以調(diào)用下面方法來還原二維碼的清晰度特幔,把輸出的二維碼傳到這個方法中赖舟,同時設(shè)置二維碼的尺寸 你會得到一個全新的 UIimage 再復(fù)制給全局變量裝二維碼的容器中

/**

*根據(jù)CIImage生成指定大小的UIImage

*

*@param image CIImage

*@param size圖片寬度

*/

- (UIImage*)createNonInterpolatedUIImageFormCIImage:(CIImage*)image withSize:(CGFloat) size

{

CGRectextent =CGRectIntegral(image.extent);

CGFloatscale =MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

// 1.創(chuàng)建bitmap;

size_twidth =CGRectGetWidth(extent) * scale;

size_theight =CGRectGetHeight(extent) * scale;

CGColorSpaceRefcs =CGColorSpaceCreateDeviceGray();

CGContextRefbitmapRef =CGBitmapContextCreate(nil, width, height,8,0, cs, (CGBitmapInfo)kCGImageAlphaNone);

CIContext*context = [CIContextcontextWithOptions:nil];

CGImageRefbitmapImage = [contextcreateCGImage:imagefromRect:extent];

CGContextSetInterpolationQuality(bitmapRef,kCGInterpolationNone);

CGContextScaleCTM(bitmapRef, scale, scale);

CGContextDrawImage(bitmapRef, extent, bitmapImage);

// 2.保存bitmap到圖片

CGImageRefscaledImage =CGBitmapContextCreateImage(bitmapRef);

CGContextRelease(bitmapRef);

CGImageRelease(bitmapImage);

return[UIImageimageWithCGImage:scaledImage];

}

截圖功能

傳進入你想要截圖的view ?然后會返回給你一個UIImage對象

#pragma mark -截圖功能

-(UIImage*)captureImageFromView:(UIView*)view

{

CGRectscreenRect = [viewbounds];

UIGraphicsBeginImageContext(screenRect.size);

CGContextRefctx =UIGraphicsGetCurrentContext();

[view.layerrenderInContext:ctx];

UIImage* image =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnimage;

}


/**

*? 根據(jù)CIImage生成指定大小的UIImage

*

*? @param image CIImage

*? @param size? 圖片寬度

*/- (UIImage*)createNonInterpolatedUIImageFormCIImage:(CIImage*)image withSize:(CGFloat) size{CGRectextent =CGRectIntegral(image.extent);CGFloatscale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));// 1.創(chuàng)建bitmap;size_t width =CGRectGetWidth(extent) * scale;? ? size_t height =CGRectGetHeight(extent) * scale;CGColorSpaceRefcs =CGColorSpaceCreateDeviceGray();CGContextRefbitmapRef =CGBitmapContextCreate(nil, width, height,8,0, cs, (CGBitmapInfo)kCGImageAlphaNone);CIContext*context = [CIContextcontextWithOptions:nil];CGImageRefbitmapImage = [context createCGImage:image fromRect:extent];CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);CGContextScaleCTM(bitmapRef, scale, scale);CGContextDrawImage(bitmapRef, extent, bitmapImage);// 2.保存bitmap到圖片CGImageRefscaledImage =CGBitmapContextCreateImage(bitmapRef);CGContextRelease(bitmapRef);CGImageRelease(bitmapImage);return[UIImageimageWithCGImage:scaledImage];}

二維碼的掃描

// 1.創(chuàng)建捕捉會話AVCaptureSession*session = [[AVCaptureSessionalloc] init];self.session= session;// 2.添加輸入設(shè)備(數(shù)據(jù)從攝像頭輸入)AVCaptureDevice*device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];AVCaptureDeviceInput*input = [AVCaptureDeviceInputdeviceInputWithDevice:device error:nil];? ? [session addInput:input];// 3.添加輸出數(shù)據(jù)(示例對象-->類對象-->元類對象-->根元類對象)AVCaptureMetadataOutput*output = [[AVCaptureMetadataOutputalloc] init];? ? [output setMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];? ? [session addOutput:output];// 3.1.設(shè)置輸入元數(shù)據(jù)的類型(類型是二維碼數(shù)據(jù))[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];// 4.添加掃描圖層AVCaptureVideoPreviewLayer*layer = [AVCaptureVideoPreviewLayerlayerWithSession:session];? ? layer.frame=self.view.bounds;? ? [self.view.layeraddSublayer:layer];self.layer= layer;// 5.開始掃描[session startRunning];

掃描到結(jié)果后會調(diào)用的方法

// 當掃描到數(shù)據(jù)時就會執(zhí)行該方法- (void)captureOutput:(AVCaptureOutput*)captureOutput didOutputMetadataObjects:(NSArray*)metadataObjects fromConnection:(AVCaptureConnection*)connection{if(metadataObjects.count>0) {//獲得掃描數(shù)據(jù),最后一個時最新掃描的數(shù)據(jù)AVMetadataMachineReadableCodeObject*object = [metadataObjects lastObject];NSLog(@"%@", object.stringValue);// 停止掃描[self.sessionstopRunning];// 將預(yù)覽圖層移除[self.layerremoveFromSuperlayer];? ? }else{NSLog(@"沒有掃描到數(shù)據(jù)");? ? }}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饺著,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肠牲,更是在濱河造成了極大的恐慌瓶籽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埂材,死亡現(xiàn)場離奇詭異塑顺,居然都是意外死亡,警方通過查閱死者的電腦和手機俏险,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門严拒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竖独,你說我怎么就攤上這事裤唠。” “怎么了莹痢?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵种蘸,是天一觀的道長。 經(jīng)常有香客問我竞膳,道長航瞭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任坦辟,我火速辦了婚禮刊侯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锉走。我一直安慰自己滨彻,他們只是感情好藕届,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亭饵,像睡著了一般休偶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辜羊,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天椅贱,我揣著相機與錄音,去河邊找鬼只冻。 笑死庇麦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的喜德。 我是一名探鬼主播山橄,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舍悯!你這毒婦竟也來了航棱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤萌衬,失蹤者是張志新(化名)和其女友劉穎饮醇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秕豫,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡朴艰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了混移。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祠墅。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖歌径,靈堂內(nèi)的尸體忽然破棺而出毁嗦,到底是詐尸還是另有隱情,我是刑警寧澤回铛,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布狗准,位于F島的核電站,受9級特大地震影響茵肃,放射性物質(zhì)發(fā)生泄漏腔长。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一免姿、第九天 我趴在偏房一處隱蔽的房頂上張望饼酿。 院中可真熱鬧榕酒,春花似錦胚膊、人聲如沸故俐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽药版。三九已至,卻和暖如春喻犁,著一層夾襖步出監(jiān)牢的瞬間槽片,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工肢础, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留还栓,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓传轰,卻偏偏與公主長得像剩盒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子慨蛙,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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