2013-06-20 2 views
0

카메라 롤에서 가져온 UIImage가 있습니다. 다음 코드를 가지고 :UIImageJPEGRepresentation을 호출 할 때 UIImage 방향 설정 문제

UIImage *img = [UIImage imageWithCGImage: [[asset defaultRepresentation] fullResolutionImage]]; 
return UIImageJPEGRepresentation(img, 1.0); 

내가 UIImageView에서 img를 볼 때 방향이 정확합니다. 그러나 UIImageJPEGRepresentation에서 NSData 객체를 반환하면 일부 이미지가 거꾸로 표시됩니다 (모든 이미지가 아니라 일부 이미지).

나는 그것을 고쳐야하는 코드를 찾았지만 거꾸로 나타나는 것들은 UP 방향을 반환하기 때문에 코드가 실행되지 않기 때문에 나에게 도움이되지 않습니다. 사용하려고 시도한 코드는 다음과 같습니다.

if (image.imageOrientation == UIImageOrientationUp) return image; 
CGAffineTransform transform = CGAffineTransformIdentity; 

switch (image.imageOrientation) { 
    case UIImageOrientationDown: 
    case UIImageOrientationDownMirrored: 
     transform = CGAffineTransformTranslate(transform, image.size.width, image.size.height); 
     transform = CGAffineTransformRotate(transform, M_PI); 
     break; 

    case UIImageOrientationLeft: 
    case UIImageOrientationLeftMirrored: 
     transform = CGAffineTransformTranslate(transform, image.size.width, 0); 
     transform = CGAffineTransformRotate(transform, M_PI_2); 
     break; 

    case UIImageOrientationRight: 
    case UIImageOrientationRightMirrored: 
     transform = CGAffineTransformTranslate(transform, 0, image.size.height); 
     transform = CGAffineTransformRotate(transform, -M_PI_2); 
     break; 
    case UIImageOrientationUp: 
    case UIImageOrientationUpMirrored: 
     break; 
} 

switch (image.imageOrientation) { 
    case UIImageOrientationUpMirrored: 
    case UIImageOrientationDownMirrored: 
     transform = CGAffineTransformTranslate(transform, image.size.width, 0); 
     transform = CGAffineTransformScale(transform, -1, 1); 
     break; 

    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRightMirrored: 
     transform = CGAffineTransformTranslate(transform, image.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, image.size.width, image.size.height, 
             CGImageGetBitsPerComponent(image.CGImage), 0, 
             CGImageGetColorSpace(image.CGImage), 
             CGImageGetBitmapInfo(image.CGImage)); 
CGContextConcatCTM(ctx, transform); 
switch (image.imageOrientation) { 
    case UIImageOrientationLeft: 
    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRight: 
    case UIImageOrientationRightMirrored: 
     // Grr... 
     CGContextDrawImage(ctx, CGRectMake(0,0,image.size.height,image.size.width), image.CGImage); 
     break; 

    default: 
     CGContextDrawImage(ctx, CGRectMake(0,0,image.size.width,image.size.height), image.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; 

왜 UIImageJPEGRepresentation이 방향에 영향을 주는지?

미리 감사드립니다.

답변

-1

UIImage의 UIImageJPEGRepresentation은 imageOrientation 정보를 포함하여 UIImage 메타 데이터의 대부분을 삭제하므로 JPEG로 변환 한 후 이미지를 저장하기 전에 방향 정보를 다시 추가해야합니다. 그렇지 않으면 모든 JPEG가 자신이 위장 된 것으로보고합니다.

지금 실제로을 추가하는 방법을, 나는 How to write orientation data to the UIImage iOS SDKProblem setting exif data for an imageiOS UIImagePickerController result image orientation after upload

시작 모르겠어 ...