• ios 自带的二维码生成


    1.二维码生成

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

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

    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  
    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(00, 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_81);  
    38.     if (!code) {  
    39.         return nil;  
    40.     }  
    41.       
    42.     // create context  
    43.     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  
    44.     CGContextRef ctx = CGBitmapContextCreate(0, size, size, 8size * 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.width1.0 / 5.5 * size.height);  
    73.       
    74.       
    75.       
    76.     UIGraphicsBeginImageContext(size);  
    77.       
    78.       
    79.       
    80.     [twoDimensionCode drawInRect:CGRectMake(00, 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(00, size.width, size.height)];  
    106.       
    107.     [avatarImage drawInRect:CGRectMake(1010, 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苹果推出了自带的扫描功能,下面直接代码:

     

      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.     }  

  • 相关阅读:
    Hadoop与hbase单机环境安装
    Hive集成Hbase
    正确搭建hbase完全分布式集群(二)
    正确搭建hbase完全分布式集群(一)
    zookeeper 及 独立hbase 的安装与配置
    sqoop安装及导入sqlserver数据
    hadoop+hive+sqoop安装笔记
    如何正确安装mysql 8
    安装nginx为windows服务
    python web编程之django post请求
  • 原文地址:https://www.cnblogs.com/lidongq/p/4463984.html
Copyright © 2020-2023  润新知