iOS11及以上 保存拍照的圖片都會進行自動旋轉處理,在上傳圖片時可通過圖片格式判斷獲取圖片類型,并重新調整方向,調整方向的分類代碼如下: ,但會出現(xiàn)HEIC轉jpeg(轉jpeg是因為pc端也要瀏覽該圖片), 占用內存變大的現(xiàn)象.?
- (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;
}