FanQRCodeScan(二維碼條形碼掃描生成解析)

一個(gè)Objective-C的github 系統(tǒng)自帶二維碼條形碼的掃描和生成及圖片解析二維碼(上線App Store的開源項(xiàng)目)

FanQRCodeScan(iOS8+)

  • 可以定制掃描框和字體圖標(biāo)的顏色
  • 可以定制生成二維碼的前景色和背景色哦
  • 另外還支持橫豎屏切換哦样眠,是不是很激爽
  • 其實(shí)還是支持中文素跺,英文逮壁,繁體中文的哦

Demo功能

  • 支持創(chuàng)建各種二維碼
  • 3D-Touch的icon及圖片和列表按壓支持
  • 隨時(shí)隨地的系統(tǒng)分享功能
  • 每次生成掃描都記錄拗军,隨時(shí)刪除單個(gè)或全部
  • storyboard的界面方式政冻,可供新手學(xué)習(xí)牢硅,autolayout和舊版UIViewAutoresizing的約束方法
  • 除了FMDB蒙谓,沒有接入任何第三方庫。

App store :韓QRCode 上線預(yù)覽圖如下:

創(chuàng)建二維碼

掃一掃

3D-Touch

我的二維碼

功能介紹

1.二維碼條形碼掃描 (一個(gè)block搞定是不是很酸爽)
FanQRCodeScanViewController *qrCoreVC=[[FanQRCodeScanViewController alloc]initWithQRBlock:^(NSString *resultSrt,NSString *type, BOOL isSuccess) {
        if (isSuccess) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self fan_showAlertWithTitle:@"掃描結(jié)果" message:resultSrt];
            });
            NSLog(@"%@",resultSrt);
        }else{
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self fan_showAlertWithTitle:@"掃描失敗" message:resultSrt];
            });
            NSLog(@"關(guān)閉或失敗:%@",resultSrt);
        }
        
    }];
    qrCoreVC.themColor=[UIColor redColor];
    qrCoreVC.scanColor=[UIColor yellowColor];
    [self presentViewController:qrCoreVC animated:YES completion:nil];
2.二維碼生成
//二維碼調(diào)用
UIImage *image=[FanQRCodeScanViewController fan_qrCodeImageWithText:textField.text size:CGSizeMake(300, 300)];

#pragma mark - 二維碼生成
+(UIImage *)fan_qrCodeImageWithText:(NSString *)text size:(CGSize)size{
    return [[self class] fan_qrCodeImageWithText:text size:size color:[UIColor blackColor] bgColor:[UIColor whiteColor]];
}
+(UIImage *)fan_qrCodeImageWithText:(NSString *)text size:(CGSize)size color:(UIColor *)color bgColor:(UIColor *)bgColor{
    NSData *stringData = [text dataUsingEncoding: NSUTF8StringEncoding];
    
    //生成
    CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    [qrFilter setValue:stringData forKey:@"inputMessage"];
    [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];
    
    UIColor *onColor = color;
    UIColor *offColor = bgColor;
    //上色
    CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"
                                       keysAndValues:
                             @"inputImage",qrFilter.outputImage,
                             @"inputColor0",[CIColor colorWithCGColor:onColor.CGColor],
                             @"inputColor1",[CIColor colorWithCGColor:offColor.CGColor],
                             nil];
    
    CIImage *qrImage = colorFilter.outputImage;
    
    //繪制
    CGImageRef cgImage = [[CIContext contextWithOptions:nil] createCGImage:qrImage fromRect:qrImage.extent];
    UIGraphicsBeginImageContext(size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetInterpolationQuality(context, kCGInterpolationNone);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage);
    if (cgImage==nil) {
        return nil;
    }
    UIImage *codeImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    CGImageRelease(cgImage);
    return codeImage;
}


3.條形碼生成
//條形碼調(diào)用
UIImage *image=[FanQRCodeScanViewController fan_generateBarImageWithCode:textField.text size:CGSizeMake(300, 160)];

//條形碼生成
+ (UIImage *)fan_generateBarImageWithCode:(NSString *)code size:(CGSize)size{
    //生成條形碼
    CIImage *barcodeImage;
    //NSISOLatin1StringEncoding
    NSData *data = [code dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:false];
    CIFilter *filter = [CIFilter filterWithName:@"CICode128BarcodeGenerator"];
    
    [filter setValue:data forKey:@"inputMessage"];
    
    barcodeImage = [filter outputImage];
    
    //消除模糊(此種方法,得到的圖片不能保存到相冊)
//    CGFloat scaleX = size.width / barcodeImage.extent.size.width;// extent 返回圖片的frame
//    CGFloat scaleY = size.height / barcodeImage.extent.size.height;
//    CIImage *transformedImage = [barcodeImage imageByApplyingTransform:CGAffineTransformScale(CGAffineTransformIdentity, scaleX, scaleY)];
//    return [UIImage imageWithCIImage:transformedImage];
    
    //用繪制方法(可以保存到相冊)不知道什么原因
    CGImageRef cgImage = [[CIContext contextWithOptions:nil] createCGImage:barcodeImage fromRect:barcodeImage.extent];
    UIGraphicsBeginImageContext(size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetInterpolationQuality(context, kCGInterpolationNone);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage);
    if (cgImage==nil) {
        return nil;
    }
    UIImage *codeImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    CGImageRelease(cgImage);
    return codeImage;

}

Like(喜歡)

有問題請直接在文章下面留言,喜歡就給個(gè)Star(小星星)吧!

Email:fqsyfan@gmail.com

github:https://github.com/fanxiangyang/FanQRCodeScan

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子箩帚,更是在濱河造成了極大的恐慌,老刑警劉巖蛆挫,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淤袜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衰伯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門铡羡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人意鲸,你說我怎么就攤上這事烦周。” “怎么了怎顾?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵读慎,是天一觀的道長。 經(jīng)常有香客問我槐雾,道長夭委,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任募强,我火速辦了婚禮株灸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘擎值。我一直安慰自己慌烧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布鸠儿。 她就那樣靜靜地躺著屹蚊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪进每。 梳的紋絲不亂的頭發(fā)上汹粤,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音品追,去河邊找鬼玄括。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肉瓦,可吹牛的內(nèi)容都是我干的遭京。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泞莉,長吁一口氣:“原來是場噩夢啊……” “哼哪雕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鲫趁,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤斯嚎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堡僻,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糠惫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钉疫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硼讽。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牲阁,靈堂內(nèi)的尸體忽然破棺而出固阁,到底是詐尸還是另有隱情,我是刑警寧澤城菊,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布备燃,位于F島的核電站,受9級特大地震影響凌唬,放射性物質(zhì)發(fā)生泄漏并齐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一法瑟、第九天 我趴在偏房一處隱蔽的房頂上張望冀膝。 院中可真熱鬧,春花似錦霎挟、人聲如沸窝剖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赐纱。三九已至,卻和暖如春熬北,著一層夾襖步出監(jiān)牢的瞬間疙描,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工讶隐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留起胰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓巫延,卻偏偏與公主長得像效五,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子炉峰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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

  • 太長了畏妖,還是轉(zhuǎn)載吧...今天在看博客的時(shí)候,無意中發(fā)現(xiàn)了@Trinea在GitHub上的一個(gè)項(xiàng)目Android開源...
    龐哈哈哈12138閱讀 20,182評論 3 283
  • 總有一種期待 在紅塵的門外 叩擊聲疼阔,時(shí)辰浣伲回想在夜半 這個(gè)世界不是我說了算 心海也控制不住被攪拌 滾滾凡塵半夷,揮卻佛陀...
    煙雨心清閱讀 392評論 10 17
  • 我想疯攒,好好愛自己嗦随。 我知道,要好好愛自己敬尺。 世間的路,多崎嶇贴浙; 世間的人砂吞,多復(fù)雜。 愿你走完半生崎溃,歸來仍是少年蜻直!
    何以清淺閱讀 93評論 0 0
  • 年年底28了,都還沒確定哪一天回去袁串,或者要不要回去概而,這話聽起來確實(shí)讓人匪夷所思,這大過年的囱修,時(shí)間計(jì)劃怎么安排的赎瑰,讓...
    北海棠閱讀 739評論 0 1