iOS原生二维码扫描&libqrencode生成二维码
2016-07-22 17:14
417 查看
一、iOS原生二维码扫描
//开始扫描
- (void)beginScanning
{
//创建摄像设备
AVCaptureDevice *device = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:nil];
if (!input) {
return;
}
//创建输出流
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput
alloc] init];
//设置代理,在主线程中刷新
[output setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
//设置有效扫描区域
CGRect scanCrop = [self
getScanCrop:self.scanWindow.bounds
readerViewBounds:self.view.frame];
output.rectOfInterest = scanCrop;
//初始化链接对象
self.session = [[AVCaptureSession
alloc] init];
//高质量采光率
[self.session
setSessionPreset:AVCaptureSessionPresetHigh];
[self.session
addInput:input];
[self.session
addOutput:output];
//设置扫描的支持的编码格式
output.metadataObjectTypes =
@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer
layerWithSession:_session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer
insertSublayer:layer atIndex:0];
[self.session
startRunning];
}
//获取扫描结果
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection
*)connection{
if (metadataObjects.count>0) {
[_session
stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects
objectAtIndex : 0 ];
UIAlertView *alert = [[UIAlertView
alloc] initWithTitle:@"扫描结果"
message:metadataObject.stringValue
delegate:self
cancelButtonTitle:@"退出"
otherButtonTitles:@"再次扫描",
nil];
[alert show];
}
}
二、识别图片中的二维码
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//1.获取选择的图片
UIImage *image = info[UIImagePickerControllerOriginalImage];
//2.初始化一个监测器
CIDetector*detector = [CIDetector
detectorOfType:CIDetectorTypeQRCode
context:nil
options:@{
CIDetectorAccuracy : CIDetectorAccuracyHigh
}];
[picker dismissViewControllerAnimated:YES
completion:^{
//监测到的结果数组
NSArray *features = [detector
featuresInImage:[CIImage
imageWithCGImage:image.CGImage]];
if (features.count >=1) {
/**结果对象 */
CIQRCodeFeature *feature = [features
objectAtIndex:0];
NSString *scannedResult = feature.messageString;
UIAlertView * alertView = [[UIAlertView
alloc]initWithTitle:@"扫描结果"
message:scannedResult delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil,
nil];
[alertView show];
}
else{
UIAlertView * alertView = [[UIAlertView
alloc]initWithTitle:@"提示"
message:@"该图片没有包含一个二维码!"
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil,
nil];
[alertView show];
}
}];
}
三、libqrencode生成二维码
//生成二维码信息图片
- (void)createCodeImage
{
UIImage *image=[UIImage
imageNamed:@"hold2_60x72_"];
UIImage*tempImage=[QRCodeGenerator
qrImageForString:self.codeInfo.text
imageSize:360
Topimg:image withColor:kRandomColors];
self.codeImage.image = tempImage;
}
这里只是粘贴处重要代码,如果有需要可以私信我。。。
//开始扫描
- (void)beginScanning
{
//创建摄像设备
AVCaptureDevice *device = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:nil];
if (!input) {
return;
}
//创建输出流
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput
alloc] init];
//设置代理,在主线程中刷新
[output setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
//设置有效扫描区域
CGRect scanCrop = [self
getScanCrop:self.scanWindow.bounds
readerViewBounds:self.view.frame];
output.rectOfInterest = scanCrop;
//初始化链接对象
self.session = [[AVCaptureSession
alloc] init];
//高质量采光率
[self.session
setSessionPreset:AVCaptureSessionPresetHigh];
[self.session
addInput:input];
[self.session
addOutput:output];
//设置扫描的支持的编码格式
output.metadataObjectTypes =
@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer
layerWithSession:_session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer
insertSublayer:layer atIndex:0];
[self.session
startRunning];
}
//获取扫描结果
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection
*)connection{
if (metadataObjects.count>0) {
[_session
stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects
objectAtIndex : 0 ];
UIAlertView *alert = [[UIAlertView
alloc] initWithTitle:@"扫描结果"
message:metadataObject.stringValue
delegate:self
cancelButtonTitle:@"退出"
otherButtonTitles:@"再次扫描",
nil];
[alert show];
}
}
二、识别图片中的二维码
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//1.获取选择的图片
UIImage *image = info[UIImagePickerControllerOriginalImage];
//2.初始化一个监测器
CIDetector*detector = [CIDetector
detectorOfType:CIDetectorTypeQRCode
context:nil
options:@{
CIDetectorAccuracy : CIDetectorAccuracyHigh
}];
[picker dismissViewControllerAnimated:YES
completion:^{
//监测到的结果数组
NSArray *features = [detector
featuresInImage:[CIImage
imageWithCGImage:image.CGImage]];
if (features.count >=1) {
/**结果对象 */
CIQRCodeFeature *feature = [features
objectAtIndex:0];
NSString *scannedResult = feature.messageString;
UIAlertView * alertView = [[UIAlertView
alloc]initWithTitle:@"扫描结果"
message:scannedResult delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil,
nil];
[alertView show];
}
else{
UIAlertView * alertView = [[UIAlertView
alloc]initWithTitle:@"提示"
message:@"该图片没有包含一个二维码!"
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil,
nil];
[alertView show];
}
}];
}
三、libqrencode生成二维码
//生成二维码信息图片
- (void)createCodeImage
{
UIImage *image=[UIImage
imageNamed:@"hold2_60x72_"];
UIImage*tempImage=[QRCodeGenerator
qrImageForString:self.codeInfo.text
imageSize:360
Topimg:image withColor:kRandomColors];
self.codeImage.image = tempImage;
}
这里只是粘贴处重要代码,如果有需要可以私信我。。。
相关文章推荐
- 马化腾亲自“站台” 企业微信和个人微信互通能带来什么?
- 基于C#技术实现身份证识别功能
- 批处理制作二维码生成器
- 识别 MS SQL 各个版本的版本号的方法
- 二维码的生成细节和原理
- jQuery qrcode生成二维码的方法
- Node.js 条形码识别程序构建思路详解
- C#结合数据库实现验证识别ID卡内容的方法
- 使用jquery.qrcode.min.js实现中文转化二维码
- jquery插件qrcode在线生成二维码
- JavaScript生成二维码图片小结
- C#识别出图片里的数字和字母
- php制作中间带自己定义图片二维码的方法
- zbar解码二维码和条形码示例
- php使用qr生成二维码的示例分享
- php实现扫描二维码根据浏览器类型访问不同下载地址
- PHP微信开发之二维码生成类
- asp.net(C#)使用QRCode生成图片中心加Logo或图像的二维码实例
- Shell实现识别物理cpu个数、核心数
- PHP QRCODE生成彩色二维码的方法