一、二维码生成
步骤:
- 创建一个imageView,并设置imageView的frame
- 创建CIFilter,filter的名字是@“CIQRCodeGenerator”二维码生产者
得到此名称的过滤器有如下值可以设置
NSLog(@"allkeys === %@",filter.inputKeys);
/*
Key:
inputImage
inputColor0
inputColor1
*/
- 设置value
- filter生成图片,完成。。。
代码如下:
#pragma mark - 二维码生成器
+(UIImage *)QRImageWithMessage:(NSString *)message size:(CGSize)size
{
//1. 信息过滤器
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
NSLog(@"allkeys === %@",filter.inputKeys);
/*
Key:
inputImage
inputColor0
inputColor1
*/
//2. 设置信息
[filter setValue:[message dataUsingEncoding:4] forKey:@"inputMessage"];
//3. 生成图片
CIImage *ciImage = [filter outputImage];
return [[UIImage imageWithCIImage:colorImage] imageFromContextWithSize:size];
}
设置图片的过滤色第一种方式:
//4. 伪造色过滤器
CIFilter *colorFilter = [CIFilter filterWithName:@"CIFalseColor"];
NSLog(@"allkeys === %@",colorFilter.inputKeys);
/*
*注释:都是要闯进去的参数
*allkeys = (
inputImage,
inputColor0,
inputColor1)
*/
//5. 设置要添加颜色的图片
[colorFilter setValue:ciImage forKey:@"inputImage"];
//6. 设置颜色
[colorFilter setValue:[CIColor colorWithCGColor:[UIColor redColor].CGColor] forKey:@"inputColor0"];
//7. 设置背景颜色
//[colorFilter setValue:[CIColor colorWithCGColor:[UIColor redColor].CGColor] forKey:@"inputColor1"];
//8.生成图片
CIImage *colorImage = [colorFilter outputImage];
设置图片的过滤色第二种方式:
#pragma mark - 处理成黑白照
CIFilter *filter = [CIFilter filterWithName:@"CIColorMonochrome"];
NSLog(@"===== %@",filter.inputKeys);
/*
*注释
*allkeys = (
inputImage,
inputColor,
inputIntensity) //光强度,一般不设置
*/
[filter setValue:[CIImage imageWithCGImage:image.CGImage] forKey:@"inputImage"];
[filter setValue:[CIColor colorWithCGColor:[UIColor whiteColor].CGColor] forKey:@"inputColor"];
// [filter setValue:@(20) forKey:@"inputIntensity"];
CIImage *ciimage = [filter outputImage];
return [UIImage imageWithCIImage:ciimage];
二、二维码识别
三、二维码扫描
步骤:
1. 创建一个捕捉会话session
分步骤 | ...
----|------|----
添加一个捕捉设备:| AVCaptureDeviceInput
添加一个元数据输出代理: | <AVCaptureMetadataOutputObjectsDelegate>
兴趣范围 | rectOfInterest
2. 添加一个捕捉的视频预览层layer
分步骤 | ...
----|------|----
视频预览层| AVCaptureVideoPreviewLayer
3. 实现代理方法
分步骤 | ...
----|------|----
实现代理方法| - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
以下是代理方法:
#pragma mark - AVCaptureMetadataOutputObjectsDelegate
/**
* 当扫描成功后会触发
*
* @param captureOutput <#captureOutput description#>
* @param metadataObjects <#metadataObjects description#>
* @param connection <#connection description#>
*/
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
if (metadataObjects.count == 0)
{
return;
}
//停止扫描
[self stopRunning];
//获取二维码信息
AVMetadataMachineReadableCodeObject *object = metadataObjects.firstObject;
//获取二维码数据
NSString *value = object.stringValue;
//url
if ([value hasPrefix:@"https://"] || [value hasPrefix:@"http://"])
{
NSString *urlString = [value stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
//用浏览器打开
[[UIApplication sharedApplication] openURL:url];
}
//微信支付
else if([value hasPrefix:@"weixinPay://"])
{
}
//打开qq
else if([value hasPrefix:@"mqq://"])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:value]];
}
else
{
[[[UIAlertView alloc] initWithTitle:@"扫描成功" message:value delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
}
}
网友评论