[image_picker] Image picker fix metadata (#3873)

This PR fixes a rotation problem where "Select Photos" limited access is chosen but the image that is picked is not included in selected photos and the image is scaled.
diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md
index 9c2bcc7..380fcf4 100644
--- a/packages/image_picker/image_picker/CHANGELOG.md
+++ b/packages/image_picker/image_picker/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.7.5+1
+
+* Fixes a rotation problem where Select Photos limited access is chosen but the image that is picked 
+is not included selected photos and image is scaled.
+
 ## 0.7.5
 
 * Fixes an issue where image rotation is wrong when Select Photos chose and image is scaled.
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h
index 02b58d3..b0edd03 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.h
@@ -20,7 +20,8 @@
 
 + (UIImage *)scaledImage:(UIImage *)image
                 maxWidth:(NSNumber *)maxWidth
-               maxHeight:(NSNumber *)maxHeight;
+               maxHeight:(NSNumber *)maxHeight
+     isMetadataAvailable:(BOOL)isMetadataAvailable;
 
 // Resize all gif animation frames.
 + (GIFInfo *)scaledGIFImage:(NSData *)data
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m
index 2f6ead7..7b45407 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerImageUtil.m
@@ -30,7 +30,8 @@
 
 + (UIImage *)scaledImage:(UIImage *)image
                 maxWidth:(NSNumber *)maxWidth
-               maxHeight:(NSNumber *)maxHeight {
+               maxHeight:(NSNumber *)maxHeight
+     isMetadataAvailable:(BOOL)isMetadataAvailable {
   double originalWidth = image.size.width;
   double originalHeight = image.size.height;
 
@@ -69,6 +70,19 @@
     }
   }
 
+  if (!isMetadataAvailable) {
+    UIImage *imageToScale = [UIImage imageWithCGImage:image.CGImage
+                                                scale:1
+                                          orientation:image.imageOrientation];
+
+    UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, 1.0);
+    [imageToScale drawInRect:CGRectMake(0, 0, width, height)];
+
+    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    return scaledImage;
+  }
+
   // Scaling the image always rotate itself based on the current imageOrientation of the original
   // Image. Set to orientationUp for the orignal image before scaling, so the scaled image doesn't
   // mess up with the pixels.
@@ -130,7 +144,7 @@
     }
 
     UIImage *image = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationUp];
-    image = [self scaledImage:image maxWidth:maxWidth maxHeight:maxHeight];
+    image = [self scaledImage:image maxWidth:maxWidth maxHeight:maxHeight isMetadataAvailable:YES];
 
     [images addObject:image];
 
diff --git a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
index c368c42..2a9e70c 100644
--- a/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
+++ b/packages/image_picker/image_picker/ios/Classes/FLTImagePickerPlugin.m
@@ -367,15 +367,16 @@
             if (image != nil) {
               __block UIImage *localImage = image;
               dispatch_async(dispatch_get_main_queue(), ^{
+                PHAsset *originalAsset =
+                    [FLTImagePickerPhotoAssetUtil getAssetFromPHPickerResult:result];
+
                 if (maxWidth != (id)[NSNull null] || maxHeight != (id)[NSNull null]) {
                   localImage = [FLTImagePickerImageUtil scaledImage:localImage
                                                            maxWidth:maxWidth
-                                                          maxHeight:maxHeight];
+                                                          maxHeight:maxHeight
+                                                isMetadataAvailable:originalAsset != nil];
                 }
 
-                PHAsset *originalAsset =
-                    [FLTImagePickerPhotoAssetUtil getAssetFromPHPickerResult:result];
-
                 if (!originalAsset) {
                   // Image picked without an original asset (e.g. User took a photo directly)
                   [self saveImageWithPickerInfo:nil
@@ -449,11 +450,15 @@
     NSNumber *imageQuality = [_arguments objectForKey:@"imageQuality"];
     NSNumber *desiredImageQuality = [self getDesiredImageQuality:imageQuality];
 
+    PHAsset *originalAsset = [FLTImagePickerPhotoAssetUtil getAssetFromImagePickerInfo:info];
+
     if (maxWidth != (id)[NSNull null] || maxHeight != (id)[NSNull null]) {
-      image = [FLTImagePickerImageUtil scaledImage:image maxWidth:maxWidth maxHeight:maxHeight];
+      image = [FLTImagePickerImageUtil scaledImage:image
+                                          maxWidth:maxWidth
+                                         maxHeight:maxHeight
+                               isMetadataAvailable:originalAsset != nil];
     }
 
-    PHAsset *originalAsset = [FLTImagePickerPhotoAssetUtil getAssetFromImagePickerInfo:info];
     if (!originalAsset) {
       // Image picked without an original asset (e.g. User took a photo directly)
       [self saveImageWithPickerInfo:info image:image imageQuality:desiredImageQuality];
diff --git a/packages/image_picker/image_picker/ios/Tests/ImageUtilTests.m b/packages/image_picker/image_picker/ios/Tests/ImageUtilTests.m
index 958c99f..54a691d 100644
--- a/packages/image_picker/image_picker/ios/Tests/ImageUtilTests.m
+++ b/packages/image_picker/image_picker/ios/Tests/ImageUtilTests.m
@@ -14,7 +14,21 @@
 
 - (void)testScaledImage_ShouldBeScaled {
   UIImage *image = [UIImage imageWithData:ImagePickerTestImages.JPGTestData];
-  UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image maxWidth:@3 maxHeight:@2];
+  UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image
+                                                  maxWidth:@3
+                                                 maxHeight:@2
+                                       isMetadataAvailable:YES];
+
+  XCTAssertEqual(newImage.size.width, 3);
+  XCTAssertEqual(newImage.size.height, 2);
+}
+
+- (void)testScaledImage_ShouldBeScaledWithNoMetadata {
+  UIImage *image = [UIImage imageWithData:ImagePickerTestImages.JPGTestData];
+  UIImage *newImage = [FLTImagePickerImageUtil scaledImage:image
+                                                  maxWidth:@3
+                                                 maxHeight:@2
+                                       isMetadataAvailable:NO];
 
   XCTAssertEqual(newImage.size.width, 3);
   XCTAssertEqual(newImage.size.height, 2);
diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml
index 4bc7cbe..fa6f653 100755
--- a/packages/image_picker/image_picker/pubspec.yaml
+++ b/packages/image_picker/image_picker/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Flutter plugin for selecting images from the Android and iOS image
   library, and taking new pictures with the camera.
 homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker/image_picker
-version: 0.7.5
+version: 0.7.5+1
 
 flutter:
   plugin: