iOS11 HEIC图片上传到服务器自动旋转

iOS11及以上 保存拍照的图片都会进行自动旋转处理,在上传图片时可通过图片格式判断获取图片类型,并重新调整方向,调整方向的分类代码如下: ,但会出现HEIC转jpeg(转jpeg是因为pc端也要浏览该图片), 占用内存变大的现象. 



- (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;

    }


    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;

    }


    // 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 = [UIImageimageWithCGImage:cgimg];

    CGContextRelease(ctx);

    CGImageRelease(cgimg);

    returnimg;

}

你可能感兴趣的:(iOS11 HEIC图片上传到服务器自动旋转)