ios二維碼生成掃描

ios二維碼生成


    //創(chuàng)建濾鏡對象

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

    //恢復(fù)濾鏡的默認(rèn)屬性

    [filter setDefaults];

    NSData *infoData = [data dataUsingEncoding:NSUTF8StringEncoding];

    //設(shè)置filter的InputMessages數(shù)據(jù)

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

    CIImage *outputImage = [filter outputImage];

    UIImage *image = [self createUIImageFromCIImage:outputImage withWidth:width];

    return image;
}

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

+ (UIImage *)createUIImageFromCIImage:(CIImage *)CIImage withWidth:(CGFloat)imageWidth{

    CGRect extent = CGRectIntegral(CIImage.extent);
    CGFloat scale = MIN(imageWidth / CGRectGetWidth(extent), imageWidth / CGRectGetHeight(extent));
    
    //創(chuàng)建bitMap
    size_t width = CGRectGetWidth(extent) * scale;
    size_t height = CGRectGetHeight(extent) * scale;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceGray();
    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpaceRef, (CGBitmapInfo)kCGImageAlphaNone);
    CIContext *context = [CIContext contextWithOptions:nil];
    
    CGImageRef bitmapImage = [context createCGImage:CIImage fromRect:extent];
    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
    CGContextScaleCTM(bitmapRef, scale, scale);
    CGContextDrawImage(bitmapRef, extent, bitmapImage);
    
    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
    CGContextRelease(bitmapRef);
    CGImageRelease(bitmapImage);
    
    return [UIImage imageWithCGImage:scaledImage];
}
+ (UIImage *)generateLogoQRCode:(NSString *)data imageWidth:(CGFloat)imageWidth logoImageName:(NSString *)logoImageName logoScaleToSuperView:(CGFloat)logoScale{
    
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    //恢復(fù)濾鏡的默認(rèn)屬性
    [filter setDefaults];
    
    NSData *infoData = [data dataUsingEncoding:NSUTF8StringEncoding];
    
    //設(shè)置filter的InputMessages數(shù)據(jù)
    [filter setValue:infoData forKeyPath:@"inputMessage"];
    CIImage *outputImage = [filter outputImage];
    
//    outputImage = [outputImage imageByApplyingTransform:CGAffineTransformMakeScale(20, 20)];
    //將CIImage轉(zhuǎn)化為UIImage類型
    UIImage *start_image = [self createUIImageFromCIImage:outputImage withWidth:imageWidth];
    
    //添加logo
    UIGraphicsBeginImageContext(start_image.size);
    [start_image drawInRect:CGRectMake(0, 0, start_image.size.width, start_image.size.height)];
    
    //畫logo
    UIImage *logoImage = [UIImage imageNamed:logoImageName];
    CGFloat logoWidth = start_image.size.width * logoScale;
    CGFloat logoHeight = start_image.size.height * logoScale;
    CGFloat logoX = (start_image.size.width - logoWidth) / 2;
    CGFloat logoY = (start_image.size.width - logoHeight) / 2;
    [logoImage drawInRect:CGRectMake(logoX, logoY, logoWidth, logoHeight)];
    
    //獲取最后的圖片
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return finalImage;
}

掃描

掃描前需要申請調(diào)用攝像頭的權(quán)限

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    //創(chuàng)建輸入流
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
    //創(chuàng)建輸出流
    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
    //設(shè)置代理签夭,在主線程中刷新
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    //設(shè)置掃描范圍(取值范圍0-1,一屏幕右上角為坐標(biāo)原點(diǎn))
    output.rectOfInterest = CGRectMake(0.2, 0.2, 0.6, 0.6);
    
    _session = [[AVCaptureSession alloc] init];
    //設(shè)置采集率
    [_session setSessionPreset:AVCaptureSessionPresetHigh];
    
    //添加會話輸入輸出
    [_session addInput:input];
    [_session addOutput:output];
    
    //設(shè)置輸出數(shù)據(jù)類型弟灼,需要將元數(shù)據(jù)輸出添加到會話中,才能指定元數(shù)據(jù)類型
    //設(shè)置掃碼支持的編碼格式
    output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeCode128Code];
    
    //初始化previewLayer鹤树,傳遞給session將要顯示什么
    _previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
    _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    _previewLayer.frame = self.view.layer.bounds;
    
    //將圖層插入當(dāng)前視圖
    [self.view.layer insertSublayer:_previewLayer atIndex:0];
    //啟動會話
    [_session startRunning];

具體代碼見GitHub:https://github.com/huyong668/HYQRCode

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钩蚊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝇庭,更是在濱河造成了極大的恐慌敲长,老刑警劉巖郎嫁,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秉继,死亡現(xiàn)場離奇詭異,居然都是意外死亡泽铛,警方通過查閱死者的電腦和手機(jī)尚辑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盔腔,“玉大人杠茬,你說我怎么就攤上這事〕谒妫” “怎么了瓢喉?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舀透。 經(jīng)常有香客問我栓票,道長,這世上最難降的妖魔是什么盐杂? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任逗载,我火速辦了婚禮,結(jié)果婚禮上链烈,老公的妹妹穿的比我還像新娘。我一直安慰自己挚躯,他們只是感情好强衡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著码荔,像睡著了一般漩勤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缩搅,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天越败,我揣著相機(jī)與錄音,去河邊找鬼硼瓣。 笑死究飞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堂鲤。 我是一名探鬼主播亿傅,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘟栖!你這毒婦竟也來了葵擎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤半哟,失蹤者是張志新(化名)和其女友劉穎酬滤,沒想到半個(gè)月后签餐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盯串,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年贱田,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘴脾。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡男摧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出译打,到底是詐尸還是另有隱情耗拓,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布奏司,位于F島的核電站乔询,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏韵洋。R本人自食惡果不足惜竿刁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搪缨。 院中可真熱鬧食拜,春花似錦、人聲如沸副编。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痹届。三九已至呻待,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間队腐,已是汗流浹背蚕捉。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柴淘,地道東北人迫淹。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像悠就,于是被迫代替她去往敵國和親千绪。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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