앨범과 사진 찍는 UIImage 90도 회전 문제 해결

4177 단어

장면

  • 1.호출 시스템 UIImage Picker Controller에서 사진을 찍고 세로로 찍은 다음 UIImage 원본을 가져와 서버에 업로드한 결과 사진이 시계 반대 방향으로 90도 회전한 것을 발견했습니다
  • 2.호출 시스템 UIImage Picker Controller의 앨범에서 세로 그림을 선택한 다음 UIImage 원본을 가져와 서버에 업로드한 결과 그림도 시계 반대 방향으로 90도 회전한 것을 발견했습니다
  • tip: 1. ,UIImagePickerController allowsEditing YES. UIImagePickerControllerOriginalImage 。 2. UIImagePickerController allowsEditing YES, UIImagePickerControllerEditedImage, 아래 그림과 같이 사용한 그림입니다.
    바로jpeg
    질문 그림:
    회전jpeg

  • 시작 코드

    # pragma mark ------    ----
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        [picker dismissViewControllerAnimated:YES completion:^{
            
        }];
        UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
        self.imageview.image = image;
        self.isSelectPhoto=YES;
        self.updateImage.hidden = NO;
        [self updateCreateBtnStatus];
    }
    

    문제 해결


    선택한 이미지는 UIImageView에 직접 표시됩니다. 방향은 문제없습니다. 앨범에도 문제가 없습니다.그러나 이미지를 샌드박스 디렉터리에 쓰면 위의 그림이 회전하는 문제가 발생하는데 이 그림을 서버에 올리면 백그라운드에서 보이는 그림도 문제가 있다.다음에 서버에서 가져올 때 보여주면 문제가 있습니다.우선, 이미지를 샌드박스 디렉터리에 쓸 때, 이미지에 대해 아무런 수정도 하지 않았으니, 이 단계는 틀림없이 문제없을 것이다.바로 이미지 자체의 문제입니다. 이미지에 이미지Orientation의 읽기 전용 속성이 있음을 발견했습니다. 대응하는 UIImageOrientation은 매거 유형입니다. 다음과 같습니다.
    typedef NS_ENUM(NSInteger, UIImageOrientation) {
        UIImageOrientationUp,            // default orientation
        UIImageOrientationDown,          // 180 deg rotation
        UIImageOrientationLeft,          // 90 deg CCW
        UIImageOrientationRight,         // 90 deg CW
        UIImageOrientationUpMirrored,    // as above but image mirrored along other axis. horizontal flip
        UIImageOrientationDownMirrored,  // horizontal flip
        UIImageOrientationLeftMirrored,  // vertical flip
        UIImageOrientationRightMirrored, // vertical flip
    };
    
  • 이미지 인쇄.imageOrientation
  • NSLog(@"%ld",(long)image.imageOrientation);
    

    출력을 인쇄합니다image.imageOrientation .발견
    1. 사진을 찍어 얻은 것이다imageOrientation 출력은 0이고 대응하는 매거는UIImageOrientationUp . 사진을 찍어 얻은 것이다imageOrientation 출력은 3, 대응하는 매거는UIImageOrientationRight .
    2. 만약에imagePickerController.allowsEditing = YES; UIImagePickerControllerEditedImage, 결과가 인쇄된 것은 사진을 찍어 얻은 것이다imageOrientation 출력은 3, 대응하는 매거는UIImageOrientationRight . 사진을 찍어 얻은 것이다imageOrientation 출력은 0이고 대응하는 매거는UIImageOrientationtUP .
    3. 만약에imagePickerController.allowsEditing = YES; UIImagePickerControllerOriginalImage, 결과가 인쇄된 것은 사진을 찍어 얻은 것이다imageOrientation 출력은 0이고 대응하는 매거는UIImageOrientationUP . 사진을 찍어 얻은 것이다imageOrientation 출력은 3, 대응하는 매거는UIImageOrientationRight .
    우리 뜻대로 정상이야 사진을 찍어 얻은 것이다imageOrientation 출력은 0이고 대응하는 매거는UIImageOrientationUP . 사진을 찍어 얻은 것이다imageOrientation 출력은 3, 대응하는 매거는UIImageOrientationRight .종합하면 그게 문제겠지.세로로 사진을 찍어서 되돌아오는 이미지의 방향은 기본적으로 시계 반대 방향으로 90도 회전합니다. 샌드박스에 쓰기 전에 이미지를 조정해야 합니다.

    해결 코드

    # pragma mark ------    ----
    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
        [picker dismissViewControllerAnimated:YES completion:^{
            
        }];
        UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
         //  90 
        if(image.imageOrientation!=UIImageOrientationUp){
            UIGraphicsBeginImageContext(image.size);
            [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
            image = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
        }
        self.imageview.image = image;
        self.isSelectPhoto=YES;
        self.updateImage.hidden = NO;
        [self updateCreateBtnStatus];
    }
    

    좋은 웹페이지 즐겨찾기