ios二维码的生成与二维码图片的扫描
2017-08-18 14:57
351 查看
/** * 根据地址生成二维码图片 * * @param code 地址字符串 * @param size 图片的大小 * * @return */ -(UIImage *)getQRCode:(NSString *)code size:(CGFloat)size { CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; [filter setDefaults]; NSString *dataString = code; NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:data forKeyPath:@"inputMessage"]; CIImage *outputImage = [filter outputImage]; return [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:size]; } /** * 根据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.创建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]; }
/** * 根据二维码图片获取地址 * * @param image 二维码图片 * * @return */ -(NSString *)readQRCodeFromImage:(UIImage *)image{ NSData *data = UIImagePNGRepresentation(image); CIImage *ciimage = [CIImage imageWithData:data]; if (ciimage) { CIDetector *qrDetector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:[CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer:@(YES)}] options:@{CIDetectorAccuracy : CIDetectorAccuracyHigh}]; NSArray *resultArr = [qrDetector featuresInImage:ciimage]; if (resultArr.count >0) { CIFeature *feature = resultArr[0]; CIQRCodeFeature *qrFeature = (CIQRCodeFeature *)feature; NSString *result = qrFeature.messageString; return result; }else{ return nil; } }else{ return nil; } }
相关文章推荐
- IOS 利用zBar二维码的生成和扫描
- iOS开发--二维码/条形码(扫描(可区域)和生成)
- ios 生成二维码图片libqrencode
- 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
- iOS扫描二维码和生成二维码
- iOS 二维码 (包括扫描二维码,和读取二维码图片)
- iOS 使用AVFoundation 扫描二维码并限定扫描区域(带代码生成蒙版)
- iOS中 扫描二维码/生成二维码详解
- ios 开发之 扫描二维码和生成二维码
- iOS系统自带二维码的生成以及扫描
- iOS二维码的生成和扫描
- IOS开发二维码生成及扫描ZBarDemo
- IOS开发使用原生框架,二维码(条形码)的生成与扫描(支持长按扫描),可控制闪光灯
- IOS扫描链接生成的二维码,window.history.go(-1);window.history.back()代码不生效
- iOS生成二维码图片
- iOS原生二维码的生成与扫描
- 二维码生成、扫描、图片识别(Zxing)
- iOS 7之后,使用CIFilter生成二维码图片
- ios 原生二维码的扫描和生成
- iOS 二维码生成和扫描