【问题标题】:Image Uploads Sideways in iOS WebView在 iOS WebView 中横向上传图像
【发布时间】:2014-02-13 02:23:48
【问题描述】:

我的 iOS 应用程序的 WebView 中有一个用户注册表单。

该表单允许用户从他们的设备上传图片,但是大约 50% 的用户在上传时将他们的图片横向旋转(或上下颠倒)。

如何强制方向保持与设备照片流中显示的相同?

【问题讨论】:

    标签: ios iphone image webview


    【解决方案1】:

    我使用这个类别来修复图像方向:

    - (UIImage *)fixOrientation {
    
      // No-op if the orientation is already correct
      if (self.imageOrientation == UIImageOrientationUp) return self;
    
      // 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 (self.imageOrientation) {
        case UIImageOrientationDown:
        case UIImageOrientationDownMirrored:
          transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height);
          transform = CGAffineTransformRotate(transform, M_PI);
          break;
    
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
          transform = CGAffineTransformTranslate(transform, self.size.width, 0);
          transform = CGAffineTransformRotate(transform, M_PI_2);
          break;
    
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
          transform = CGAffineTransformTranslate(transform, 0, self.size.height);
          transform = CGAffineTransformRotate(transform, -M_PI_2);
          break;
        case UIImageOrientationUp:
        case UIImageOrientationUpMirrored:
          break;
      }
    
      switch (self.imageOrientation) {
        case UIImageOrientationUpMirrored:
        case UIImageOrientationDownMirrored:
          transform = CGAffineTransformTranslate(transform, self.size.width, 0);
          transform = CGAffineTransformScale(transform, -1, 1);
          break;
    
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRightMirrored:
          transform = CGAffineTransformTranslate(transform, self.size.height, 0);
          transform = CGAffineTransformScale(transform, -1, 1);
          break;
        case UIImageOrientationUp:
        case UIImageOrientationDown:
        case UIImageOrientationLeft:
        case UIImageOrientationRight:
          break;
      }
    
      // Now we draw the underlying CGImage into a new context, applying the transform
      // calculated above.
      CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height,
                                               CGImageGetBitsPerComponent(self.CGImage), 0,
                                               CGImageGetColorSpace(self.CGImage),
                                               CGImageGetBitmapInfo(self.CGImage));
      CGContextConcatCTM(ctx, transform);
      switch (self.imageOrientation) {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
          // Grr...
          CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage);
          break;
    
        default:
          CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.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;
    }
    

    【讨论】:

    • 我可以将它用于通过 WebView 上传的图像吗?抱歉,我是个新手
    • 如果你控制了 UIWebView,你可以将图像对象发送回原生代码并修复它。 HTH!
    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多