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:
