美文网首页
iOS11 HEIC图片上传到服务器自动旋转

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

作者: 暗光的技术小站 | 来源:发表于2018-08-13 17:54 被阅读0次

    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图片上传到服务器自动旋转

          本文链接:https://www.haomeiwen.com/subject/sdgubftx.html