码迷,mamicode.com
首页 > 移动开发 > 详细

iOS自带扫描 和 生成二维码

时间:2015-04-29 14:51:24      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

?

1.二维码生成libqrencode介绍:是一个用C语言编写的用来解析二维条形码(QRCode)的程序库,libqrencode通过手机的CCD摄像头来扫描二维条形码。导入libqrencode库,下面直接代码:[objc] view plaincopy#import < ...

1.二维码生成

libqrencode介绍:是一个用C语言编写的用来解析二维条形码(QRCode)的程序库,libqrencode通过手机的CCD摄像头来扫描二维条形码。

导入libqrencode库,下面直接代码:

?

[objc]?view plaincopy
?
  1. #import?<Foundation/Foundation.h>??
  2. ??
  3. @interface?QRCodeGenerator?:?NSObject??
  4. ??
  5. +?(UIImage?*)qrImageForString:(NSString?*)string?imageSize:(CGFloat)size;??
  6. +?(UIImage?*)?twoDimensionCodeImage:(UIImage?*)twoDimensionCode?withAvatarImage:(UIImage?*)avatarImage;??
  7. @end??

[objc]?view plaincopy
?
  1. #import?"QRCodeGenerator.h"??
  2. #import?"qrencode.h"??
  3. ??
  4. enum?{??
  5. ????qr_margin?=?3??
  6. };??
  7. ??
  8. @implementation?QRCodeGenerator??
  9. ??
  10. +?(void)drawQRCode:(QRcode?*)code?context:(CGContextRef)ctx?size:(CGFloat)size?{??
  11. ????unsigned?charchar?*data?=?0;??
  12. ????int?width;??
  13. ????data?=?code->data;??
  14. ????width?=?code->width;??
  15. ????float?zoom?=?(double)size?/?(code->width?+?2.0?*?qr_margin);??
  16. ????CGRect?rectDraw?=?CGRectMake(0,?0,?zoom,?zoom);??
  17. ??????
  18. ????//?draw??
  19. ????CGContextSetFillColor(ctx,?CGColorGetComponents([UIColor?blackColor].CGColor));??
  20. ????for(int?i?=?0;?i?<?width;?++i)?{??
  21. ????????for(int?j?=?0;?j?<?width;?++j)?{??
  22. ????????????if(*data?&?1)?{??
  23. ????????????????rectDraw.origin?=?CGPointMake((j?+?qr_margin)?*?zoom,(i?+?qr_margin)?*?zoom);??
  24. ????????????????CGContextAddRect(ctx,?rectDraw);??
  25. ????????????}??
  26. ????????????++data;??
  27. ????????}??
  28. ????}??
  29. ????CGContextFillPath(ctx);??
  30. }??
  31. ??
  32. +?(UIImage?*)qrImageForString:(NSString?*)string?imageSize:(CGFloat)size?{??
  33. ????if?(![string?length])?{??
  34. ????????return?nil;??
  35. ????}??
  36. ??????
  37. ????QRcode?*code?=?QRcode_encodeString([string?UTF8String],?0,?QR_ECLEVEL_L,?QR_MODE_8,?1);??
  38. ????if?(!code)?{??
  39. ????????return?nil;??
  40. ????}??
  41. ??????
  42. ????//?create?context??
  43. ????CGColorSpaceRef?colorSpace?=?CGColorSpaceCreateDeviceRGB();??
  44. ????CGContextRef?ctx?=?CGBitmapContextCreate(0,?size,?size,?8,?size?*?4,?colorSpace,?kCGImageAlphaPremultipliedLast);??
  45. ??????
  46. ????CGAffineTransform?translateTransform?=?CGAffineTransformMakeTranslation(0,?-size);??
  47. ????CGAffineTransform?scaleTransform?=?CGAffineTransformMakeScale(1,?-1);??
  48. ????CGContextConcatCTM(ctx,?CGAffineTransformConcat(translateTransform,?scaleTransform));??
  49. ??????
  50. ????//?draw?QR?on?this?context????
  51. ????[QRCodeGenerator?drawQRCode:code?context:ctx?size:size];??
  52. ??????
  53. ????//?get?image??
  54. ????CGImageRef?qrCGImage?=?CGBitmapContextCreateImage(ctx);??
  55. ????UIImage?*?qrImage?=?[UIImage?imageWithCGImage:qrCGImage];??
  56. ??????
  57. ????//?some?releases??
  58. ????CGContextRelease(ctx);??
  59. ????CGImageRelease(qrCGImage);??
  60. ????CGColorSpaceRelease(colorSpace);??
  61. ????QRcode_free(code);??
  62. ??????
  63. ????return?qrImage;??
  64. }??
  65. ??
  66. +?(UIImage?*)?twoDimensionCodeImage:(UIImage?*)twoDimensionCode?withAvatarImage:(UIImage?*)avatarImage{??
  67. ??????
  68. ????//?two-dimension?code?二维码??
  69. ??????
  70. ????CGSize?size?=?twoDimensionCode.size;??
  71. ??????
  72. ????CGSize?size2?=CGSizeMake(1.0?/?5.5?*?size.width,?1.0?/?5.5?*?size.height);??
  73. ??????
  74. ??????
  75. ??????
  76. ????UIGraphicsBeginImageContext(size);??
  77. ??????
  78. ??????
  79. ??????
  80. ????[twoDimensionCode?drawInRect:CGRectMake(0,?0,?size.width,?size.height)];??
  81. ??????
  82. ????[[self?avatarImage:avatarImage]?drawInRect:CGRectMake((size.width?-?size2.width)?/?2.0,?(size.height?-?size2.height)?/?2.0,?size2.width,?size2.height)];??
  83. ??????
  84. ??????
  85. ??????
  86. ????UIImage?*resultingImage?=UIGraphicsGetImageFromCurrentImageContext();??
  87. ??????
  88. ????UIGraphicsEndImageContext();??
  89. ??????
  90. ????return?resultingImage;??
  91. ??????
  92. }??
  93. ??
  94. ??
  95. +?(UIImage?*)?avatarImage:(UIImage?*)avatarImage{??
  96. ??????
  97. ????UIImage?*?avatarBackgroudImage?=?[UIImage?imageNamed:@"icon.png"];??
  98. ??????
  99. ????CGSize?size?=?avatarBackgroudImage.size;??
  100. ??????
  101. ????UIGraphicsBeginImageContext(size);??
  102. ??????
  103. ??????
  104. ??????
  105. ????[avatarBackgroudImage?drawInRect:CGRectMake(0,?0,?size.width,?size.height)];??
  106. ??????
  107. ????[avatarImage?drawInRect:CGRectMake(10,?10,?size.width?-?20,?size.height?-?20)];??
  108. ??????
  109. ??????
  110. ??????
  111. ????UIImage?*resultingImage?=UIGraphicsGetImageFromCurrentImageContext();??
  112. ??????
  113. ????UIGraphicsEndImageContext();??
  114. ??????
  115. ????return?resultingImage;??
  116. ??????
  117. }??
  118. ??
  119. @end??

2.扫描

?

iOS7苹果推出了自带的扫描功能,下面直接代码:

?

?

[objc]?view plaincopy
?
  1. -(void)viewWillAppear:(BOOL)animated??
  2. {??
  3. ????[self?setupCamera];??
  4. }??
  5. -?(void)setupCamera??
  6. {??
  7. ????//?Device??
  8. ????_device?=?[AVCaptureDevice?defaultDeviceWithMediaType:AVMediaTypeVideo];??
  9. ??????
  10. ????//?Input??
  11. ????_input?=?[AVCaptureDeviceInput?deviceInputWithDevice:self.device?error:nil];??
  12. ??????
  13. ????//?Output??
  14. ????_output?=?[[AVCaptureMetadataOutput?alloc]init];??
  15. ????[_output?setMetadataObjectsDelegate:self?queue:dispatch_get_main_queue()];??
  16. ??????
  17. ????//?Session??
  18. ????_session?=?[[AVCaptureSession?alloc]init];??
  19. ????[_session?setSessionPreset:AVCaptureSessionPresetHigh];??
  20. ????if?([_session?canAddInput:self.input])??
  21. ????{??
  22. ????????[_session?addInput:self.input];??
  23. ????}??
  24. ??????
  25. ????if?([_session?canAddOutput:self.output])??
  26. ????{??
  27. ????????[_session?addOutput:self.output];??
  28. ????}??
  29. ??????
  30. ????//?条码类型?AVMetadataObjectTypeQRCode??
  31. ????_output.metadataObjectTypes?=@[AVMetadataObjectTypeCode128Code,AVMetadataObjectTypeUPCECode,AVMetadataObjectTypeCode39Code,AVMetadataObjectTypeCode39Mod43Code,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeCode93Code,AVMetadataObjectTypePDF417Code,AVMetadataObjectTypeQRCode,AVMetadataObjectTypeAztecCode,AVMetadataObjectTypeInterleaved2of5Code,AVMetadataObjectTypeITF14Code,AVMetadataObjectTypeDataMatrixCode]?;??
  32. ??????
  33. ????//?Preview??
  34. ????_preview?=[AVCaptureVideoPreviewLayer?layerWithSession:self.session];??
  35. ????_preview.videoGravity?=?AVLayerVideoGravityResizeAspectFill;??
  36. ????_preview.frame?=CGRectMake(20,110,280,280);??
  37. ????[self.view.layer?insertSublayer:self.preview?atIndex:0];??
  38. ??????
  39. ??
  40. ??????
  41. ????//?Start??
  42. ????[_session?startRunning];??
  43. }??
  44. #pragma?mark?AVCaptureMetadataOutputObjectsDelegate??
  45. -?(void)captureOutput:(AVCaptureOutput?*)captureOutput?didOutputMetadataObjects:(NSArray?*)metadataObjects?fromConnection:(AVCaptureConnection?*)connection??
  46. {??
  47. ?????
  48. ????NSString?*stringValue;??
  49. ??????
  50. ????if?([metadataObjects?count]?>0)??
  51. ????{??
  52. ????????AVMetadataMachineReadableCodeObject?*?metadataObject?=?[metadataObjects?objectAtIndex:0];??
  53. ????????stringValue?=?metadataObject.stringValue;??
  54. ????}??
  55. ??????
  56. ????[_session?stopRunning];??
  57. ????UIAlertView?*?alert?=?[[UIAlertView?alloc]initWithTitle:@"提示"?message:[NSString?stringWithFormat:@"结果:%@",stringValue]?delegate:self?cancelButtonTitle:nil?otherButtonTitles:@"知道了",@"重新扫描",?nil?nil];??
  58. ????[alert?show];??
  59. }??
  60. -?(void)alertView:(UIAlertView?*)alertView?clickedButtonAtIndex:(NSInteger)buttonIndex??
  61. {??
  62. ????if(buttonIndex?==?0)??
  63. ????{??
  64. ????????[self?dismissViewControllerAnimated:YES?completion:^??
  65. ?????????{??
  66. ?????????????[timer?invalidate];??
  67. ?????????}];??
  68. ??
  69. ????}??
  70. ????else??
  71. ????{??
  72. ????????[_session?startRunning];??
  73. ????}??
  74. }??

iOS自带扫描 和 生成二维码

标签:

原文地址:http://www.cnblogs.com/allen123/p/4465861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!