From ccc11f2f30ec6d61e570df31fcbfa3ae82ea85f1 Mon Sep 17 00:00:00 2001 From: Aleksei Androsov Date: Wed, 30 Aug 2017 00:21:13 -0700 Subject: [PATCH] Fix Image.getSize() according to image orientation Summary: This is fix for issue https://github.com/facebook/react-native/issues/14097 I've prepared images with different exif orientation (https://yadi.sk/d/is_xcEEo3MRAxF) 0-4 should have size 200x100 5-8 should have size 100x200 Closes https://github.com/facebook/react-native/pull/15690 Differential Revision: D5731414 Pulled By: shergin fbshipit-source-id: 7ced00ac7ac812c91216dccf0c76acd0e913dda0 --- Libraries/Image/RCTImageLoader.m | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/Libraries/Image/RCTImageLoader.m b/Libraries/Image/RCTImageLoader.m index e66a5abbc..7fcf442a3 100644 --- a/Libraries/Image/RCTImageLoader.m +++ b/Libraries/Image/RCTImageLoader.m @@ -716,10 +716,30 @@ static UIImage *RCTResizeImageIfNeeded(UIImage *image, CGSize size; if ([imageOrData isKindOfClass:[NSData class]]) { NSDictionary *meta = RCTGetImageMetadata(imageOrData); - size = (CGSize){ - [meta[(id)kCGImagePropertyPixelWidth] doubleValue], - [meta[(id)kCGImagePropertyPixelHeight] doubleValue], - }; + + NSInteger imageOrientation = [meta[(id)kCGImagePropertyOrientation] integerValue]; + switch (imageOrientation) { + case kCGImagePropertyOrientationLeft: + case kCGImagePropertyOrientationRight: + case kCGImagePropertyOrientationLeftMirrored: + case kCGImagePropertyOrientationRightMirrored: + // swap width and height + size = (CGSize){ + [meta[(id)kCGImagePropertyPixelHeight] doubleValue], + [meta[(id)kCGImagePropertyPixelWidth] doubleValue], + }; + break; + case kCGImagePropertyOrientationUp: + case kCGImagePropertyOrientationDown: + case kCGImagePropertyOrientationUpMirrored: + case kCGImagePropertyOrientationDownMirrored: + default: + size = (CGSize){ + [meta[(id)kCGImagePropertyPixelWidth] doubleValue], + [meta[(id)kCGImagePropertyPixelHeight] doubleValue], + }; + break; + } } else { UIImage *image = imageOrData; size = (CGSize){