LBXScan icon indicating copy to clipboard operation
LBXScan copied to clipboard

zxing模式下不能扫出本地二维码

Open Args opened this issue 6 years ago • 2 comments
trafficstars

Args avatar Oct 08 '19 10:10 Args

搭个车... 想邀请Repo参与者来w3c.group创建项目的对应小组。w3c.group是类似知识星球的社群工具,小组可设置为付费且有赞助功能,同时也是一个区块链主导的创作者社区。这是相关介绍: http://t.cn/Ai1vLcCU http://t.cn/Ai1vLcCG http://t.cn/Ai1vLcCA

isdotjim avatar Oct 24 '19 04:10 isdotjim

请问解决了吗,亲

llwj0303 avatar Feb 01 '21 07:02 llwj0303

自己解决了,算是库的一个BUG吧,写给需要的人😄

  • (void)recognizeImage:(UIImage *)image block:(void (^)(ZXBarcodeFormat barcodeFormat, NSString *str... 函数中一开始将image旋转后再继续用, UIImage *fixImage = [self fixOrientation:image];// 必须旋转90度才能进行解码

fixOrientation函数如下:

  • (UIImage *)fixOrientation:(UIImage *)aImage { // No-op if the orientation is already correct

    if (aImage.imageOrientation == UIImageOrientationUp) return aImage;

    // We need to calculate the proper transformation to make the image upright.

    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.

    CGAffineTransform transform = CGAffineTransformIdentity;

    switch (aImage.imageOrientation) { case UIImageOrientationDown:

      case UIImageOrientationDownMirrored:
    
          transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
    
          transform = CGAffineTransformRotate(transform, M_PI);
    
          break;
    
      case UIImageOrientationLeft:
    
      case UIImageOrientationLeftMirrored:
    
          transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
    
          transform = CGAffineTransformRotate(transform, M_PI_2);
    
          break;
    
      case UIImageOrientationRight:
    
      case UIImageOrientationRightMirrored:
    
          transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
    
          transform = CGAffineTransformRotate(transform, -M_PI_2);
    
          break;
    
      default:
    
          break;
    

    }

    switch (aImage.imageOrientation) { case UIImageOrientationUpMirrored:

      case UIImageOrientationDownMirrored:
    
          transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
    
          transform = CGAffineTransformScale(transform, -1, 1);
    
          break;
    
      case UIImageOrientationLeftMirrored:
    
      case UIImageOrientationRightMirrored:
    
          transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
    
          transform = CGAffineTransformScale(transform, -1, 1);
    
          break;
    
      default:
    
          break;
    

    }

// Now we draw the underlying CGImage into a new context, applying the transform

// calculated above.

CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,

                                         CGImageGetBitsPerComponent(aImage.CGImage), 0,

                                         CGImageGetColorSpace(aImage.CGImage),

                                         CGImageGetBitmapInfo(aImage.CGImage));

CGContextConcatCTM(ctx, transform);

switch (aImage.imageOrientation) {
    case UIImageOrientationLeft:

    case UIImageOrientationLeftMirrored:

    case UIImageOrientationRight:

    case UIImageOrientationRightMirrored:

// Grr...

        CGContextDrawImage(ctx, CGRectMake(0, 0, aImage.size.height, aImage.size.width), aImage.CGImage);

        break;

    default:

        CGContextDrawImage(ctx, CGRectMake(0, 0, aImage.size.width, aImage.size.height), aImage.CGImage);

        break;
}

// And now we just create a new UIImage from the drawing context

CGImageRef cgimg = CGBitmapContextCreateImage(ctx);

UIImage *img = [UIImage imageWithCGImage:cgimg];

CGContextRelease(ctx);

CGImageRelease(cgimg);

return img;

}

llwj0303 avatar Feb 01 '21 09:02 llwj0303