2015-05-29 50 views
0
未呈現圖像中正確的方向

我已經嘗試了很多的解決方案,但非已工作尚未的UIImageView在iPhone

繼承人我在做什麼:

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
     imagePicker.delegate = self; 
     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     imagePicker.modalPresentationStyle = UIModalPresentationCurrentContext; 
     //imagePicker.allowsEditing = YES; 

     NSOperatingSystemVersion ios8_0_0 = (NSOperatingSystemVersion){8, 0, 0}; 

      //This was suggested in answer of some question of stackoverflow 
     if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:ios8_0_0]) 
     { 
      if([[UIDevice currentDevice]orientation] == UIDeviceOrientationFaceUp) 
      { 
       if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft) 
       { 
        [[UIDevice currentDevice]setValue:[NSNumber numberWithInteger:UIDeviceOrientationLandscapeRight] forKey:@"orientation"]; 
       } 
       else 
       { 
        [[UIDevice currentDevice]setValue:[NSNumber numberWithInteger:UIDeviceOrientationLandscapeLeft] forKey:@"orientation"]; 
       } 
      } 
     } 

     self.imagePickerController = imagePicker; 
     [self presentViewController:self.imagePickerController animated:YES completion:nil]; 

} 

當上述didnt工作,我嘗試了一些別的東西同時節約圖片

NSData *imgPngData = UIImagePNGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage]); 
    UIImage *image = [UIImage imageWithData:imgPngData]; 
    imgPngData = UIImagePNGRepresentation(image); 
     [_profilePicture setImage:[UIImage imageWithCGImage:[image CGImage] scale:1.0 orientation:UIImageOrientationUp]]; 

,但對行爲產生任何影響。這是Iam拍攝這張照片時發生的事情。 Iam taking this image

這是什麼出現在我的ImageView enter image description here

請提出了一些事情。提前感謝你們所有人。

回答

1

我有同樣的問題通過集成下面的代碼來解決它。參考link的代碼

- (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)); 
// CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray(); 
// CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height, 
//           8, self.size.width, 
//            colorspace, 
//            kCGImageAlphaNone); 
    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; 
} 
+0

爲什麼正常功能的arent工作的人?有沒有什麼好的理由來實現這個調整? –

+0

下面的評論不是很好,所以很多人都寫了關於應用程序崩潰的內存。你也面對過嗎? –

+0

是的,如果你試圖拍攝這麼多次的照片,那麼它可能是應用程序得到崩潰..坦率地說,不知道這個實現的確切原因...試圖得到根本原因,但沒有得到它的任何地方..如果你發現任何地方,請與我分享.. –

-1

使用這可能會幫助你

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    { 

     [uploadImageView setContentMode:UIViewContentModeScaleAspectFit]; 
     uploadImageView.layer.masksToBounds = YES; 
     uploadImage=[info objectForKey:UIImagePickerControllerEditedImage]; 
     uploadImage = [self imageWithImage:uploadImage scaledToWidth:uploadImageView.frame.size.width]; 
     uploadImageView.image=uploadImage; 

     [picker dismissViewControllerAnimated:YES completion:nil]; 

    } 
+0

你能否詳細說明一下這段代碼? –

+0

好的,首先你提到你想要的東西。 –