UIImagePickerController editing allowed locks UIImage to max size of 320x320

前端 未结 6 1312
无人及你
无人及你 2021-01-30 12:01

Update:

With iPhone OS 3.0+, the whole UIImagePickerController API has changed. This question and answer should be considered 2.2. legacy code.


When using

6条回答
  •  南笙
    南笙 (楼主)
    2021-01-30 12:45

    Better late than never: here's the source for the orientationTransformForImage function

    
    CGAffineTransform orientationTransformForImage(UIImage *image, CGSize *newSize) {
        CGImageRef img = [image CGImage];
        CGFloat width = CGImageGetWidth(img);
        CGFloat height = CGImageGetHeight(img);
        CGSize size = CGSizeMake(width, height);
        CGAffineTransform transform = CGAffineTransformIdentity;
        CGFloat origHeight = size.height;
        UIImageOrientation orient = image.imageOrientation;
        switch(orient) { /* EXIF 1 to 8 */
            case UIImageOrientationUp:
                break;
            case UIImageOrientationUpMirrored:
                transform = CGAffineTransformMakeTranslation(width, 0.0f);
                transform = CGAffineTransformScale(transform, -1.0f, 1.0f);
                break;
            case UIImageOrientationDown:
                transform = CGAffineTransformMakeTranslation(width, height);
                transform = CGAffineTransformRotate(transform, M_PI);
                break;
            case UIImageOrientationDownMirrored:
                transform = CGAffineTransformMakeTranslation(0.0f, height);
                transform = CGAffineTransformScale(transform, 1.0f, -1.0f);
                break;
            case UIImageOrientationLeftMirrored:
                size.height = size.width;
                size.width = origHeight;
                transform = CGAffineTransformMakeTranslation(height, width);
                transform = CGAffineTransformScale(transform, -1.0f, 1.0f);
                transform = CGAffineTransformRotate(transform, 3.0f * M_PI / 2.0f);
                break;
            case UIImageOrientationLeft:
                size.height = size.width;
                size.width = origHeight;
                transform = CGAffineTransformMakeTranslation(0.0f, width);
                transform = CGAffineTransformRotate(transform, 3.0f * M_PI / 2.0f);
                break;
            case UIImageOrientationRightMirrored:
                size.height = size.width;
                size.width = origHeight;
                transform = CGAffineTransformMakeScale(-1.0f, 1.0f);
                transform = CGAffineTransformRotate(transform, M_PI / 2.0f);
                break;
            case UIImageOrientationRight:
                size.height = size.width;
                size.width = origHeight;
                transform = CGAffineTransformMakeTranslation(height, 0.0f);
                transform = CGAffineTransformRotate(transform, M_PI / 2.0f);
                break;
            default:
                ;
        }
        *newSize = size;
        return transform;
    }
    

提交回复
热议问题