iOS 细节大集合swift3.0橙红科技有限公司

iOS二维码的生成和扫码详细介绍(手把手教)

2016-11-01  本文已影响3967人  IIronMan

二.二维码的生成

下面是实际代码:

二维码不清晰

(2).处理过的图片(需要调用一个方法来处理图片)

imageView.image = [self createNonInterpolatedUIImageFormCIImage:outImage withSize:300];

/**
 *  根据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];
}

生成的二维码

处理过的二维码

iOS生成二维码code 密码: bt8f
iOS二维码生成方法封装过的code 密码: 3vqj

重点:在此我进行了对二维码的改善:效果如下

带logo的二维码

你需要做的是:(已经封装好了)

 1.导入:SDWebImage 框架
 2.拖入我封装好的类 ,导入 #import "LogoQR.h"
 3.创建UIImageView的对象来放二维码
 4.调用方法
  /**
 *  [LogoQR new] 调用方法的对象
 *  QRurl :头像的链接
 *  messages: 二维码里面存放的信息
 */
UIImageView的对象.image = [[LogoQR new] QRurl:urlString
                             messages:self.messages];

带logo的二维码 密码: q6s6

三.二维码的扫描

(1).读取二维码需要导入AVFoundation框架
(2).利用摄像头读取信息,并且输入

 <1>.获取捕捉会话(AVFoundation框架)
 <2>.设置输入摄像头
 <3>.设置输出数据
 <4>.添加预览图层
 <5>.开始扫描二维码
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
  if (metadataObjects.count>0)
   {
      //1.获取到扫描的内容
      AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];
    
      NSLog(@"扫描的内容==%@",object.stringValue);
    
      //2.停止会话
      [self.session stopRunning];
    
      //3.移除预览图层
      [self.layer removeFromSuperlayer];
    }
}

比较好的二维码扫描
也挺详细的;
说明:扫描的内容是什么是可以打印出来的,如果是链接,你可以用WebView来加载的

上一篇下一篇

猜你喜欢

热点阅读