diff --git a/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php b/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php
index 2f9a78d..b74f807 100644
--- a/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php
+++ b/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php
@@ -67,7 +67,7 @@ public function buildForm(array $form, array &$form_state, FilterFormat $filter_
       '#upload_validators' => array(
         'file_validate_extensions' => array('gif png jpg jpeg'),
         'file_validate_size' => array($max_filesize),
-        'file_validate_image_resolution' => array($max_dimensions),
+        'file_validate_image_dimensions' => array($max_dimensions),
       ),
       '#required' => TRUE,
     );
diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc
index 430f79f..55418e5 100644
--- a/core/modules/file/file.field.inc
+++ b/core/modules/file/file.field.inc
@@ -462,9 +462,9 @@ function theme_file_upload_help($variables) {
       $descriptions[] = format_plural($cardinality, 'This field can store only one file.', 'This field can store at most @count files.');
     }
   }
-  if (isset($upload_validators['file_validate_image_resolution'])) {
-    $max = $upload_validators['file_validate_image_resolution'][0];
-    $min = $upload_validators['file_validate_image_resolution'][1];
+  if (isset($upload_validators['file_validate_image_dimensions'])) {
+    $max = $upload_validators['file_validate_image_dimensions'][0];
+    $min = $upload_validators['file_validate_image_dimensions'][1];
     if ($min && $max && $min == $max) {
       $descriptions[] = t('Images must be exactly !size pixels.', array('!size' => '<strong>' . $max . '</strong>'));
     }
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 769d480..ded027f 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -5,11 +5,12 @@
  * Defines a "managed_file" Form API field and a "file" field for Field module.
  */
 
-use Drupal\file\Entity\File;
-use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Entity\EntityStorageControllerInterface;
 use Drupal\Core\Template\Attribute;
+use Drupal\file\FileInterface;
+use Drupal\file\Entity\File;
 use Drupal\file\FileUsage\FileUsageInterface;
+use Drupal\Component\Utility\NestedArray;
 
 // Load all Field module hooks for File.
 require_once __DIR__ . '/file.field.inc';
@@ -419,49 +420,56 @@ function file_validate_is_image(File $file) {
 }
 
 /**
- * Verifies that image dimensions are within the specified maximum and minimum.
+ * Verifies that image dimensions are within the specified limits.
  *
- * Non-image files will be ignored. If a image toolkit is available the image
+ * Non-image files will be ignored. If an image toolkit is available, the image
  * will be scaled to fit within the desired maximum dimensions.
  *
- * @param Drupal\file\File $file
+ * @param \Drupal\file\FileInterface $file
  *   A file entity. This function may resize the file affecting its size.
- * @param $maximum_dimensions
+ * @param string $maximum_dimensions
  *   An optional string in the form WIDTHxHEIGHT e.g. '640x480' or '85x85'. If
  *   an image toolkit is installed the image will be resized down to these
- *   dimensions. A value of 0 indicates no restriction on size, so resizing
- *   will be attempted.
- * @param $minimum_dimensions
- *   An optional string in the form WIDTHxHEIGHT. This will check that the
- *   image meets a minimum size. A value of 0 indicates no restriction.
+ *   dimensions. An empty or no value indicates no restriction on size, so no
+ *   resizing will be attempted.
+ * @param string $minimum_dimensions
+ *   An optional string in the form WIDTHxHEIGHT. This will check that the image
+ *   meets a minimum size. An empty or no value indicates no restriction.
  *
- * @return
- *   An array. If the file is an image and did not meet the requirements, it
- *   will contain an error message.
+ * @return array
+ *   A (possibly empty) list of error messages.
  *
  * @see hook_file_validate()
  */
-function file_validate_image_resolution(File $file, $maximum_dimensions = 0, $minimum_dimensions = 0) {
+function file_validate_image_dimensions(FileInterface $file, $maximum_dimensions = '', $minimum_dimensions = '') {
   $errors = array();
 
-  // Check first that the file is an image.
+  // Create an image object from the file.
   $image_factory = \Drupal::service('image.factory');
   $image = $image_factory->get($file->getFileUri());
+  // Check that the file is an image.
   if ($image->getExtension()) {
     if ($maximum_dimensions) {
       // Check that it is smaller than the given dimensions.
       list($width, $height) = explode('x', $maximum_dimensions);
       if ($image->getWidth() > $width || $image->getHeight() > $height) {
         // Try to resize the image to fit the dimensions.
-        $image = $image_factory->get($file->getFileUri());
         if ($image->getResource()) {
-          $image->scale($width, $height);
-          $image->save();
-          $file->filesize = $image->getFileSize();
-          drupal_set_message(t('The image was resized to fit within the maximum allowed dimensions of %dimensions pixels.', array('%dimensions' => $maximum_dimensions)));
+          if ($image->scale($width, $height)) {
+            if ($image->save()) {
+              $file->filesize = $image->getFileSize();
+              drupal_set_message(t('The image was resized to fit within the maximum allowed dimensions of %dimensions pixels.', array('%dimensions' => $maximum_dimensions)));
+            }
+            else {
+              $errors[] = t('The image exceeds the maximum allowed dimensions and saving a resized version failed.');
+            }
+          }
+          else {
+            $errors[] = t('The image exceeds the maximum allowed dimensions and resizing it failed.');
+          }
         }
         else {
-          $errors[] = t('The image is too large; the maximum dimensions are %dimensions pixels.', array('%dimensions' => $maximum_dimensions));
+          $errors[] = t('The image exceeds the maximum allowed dimensions of %dimensions pixels.', array('%dimensions' => $maximum_dimensions));
         }
       }
     }
@@ -780,7 +788,7 @@ function file_save_upload($form_field_name, $validators = array(), $destination
   $uploaded_files = $_FILES;
   if (!is_array($uploaded_files['files']['name'][$form_field_name])) {
     foreach (array('name', 'type', 'tmp_name', 'error', 'size') as $value)
-    $uploaded_files['files'][$value][$form_field_name] = array($uploaded_files['files'][$value][$form_field_name]);
+      $uploaded_files['files'][$value][$form_field_name] = array($uploaded_files['files'][$value][$form_field_name]);
   }
 
   $files = array();
@@ -808,7 +816,7 @@ function file_save_upload($form_field_name, $validators = array(), $destination
           break;
         }
 
-        // Unknown error
+      // Unknown error
       default:
         drupal_set_message(t('The file %file could not be saved. An unknown error has occurred.', array('%file' => $name)), 'error');
         $files[$i] = FALSE;
diff --git a/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php b/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php
index cfde9a3..eef44d1 100644
--- a/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php
+++ b/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php
@@ -63,19 +63,19 @@ function testFileValidateIsImage() {
    */
   function testFileValidateImageResolution() {
     // Non-images.
-    $errors = file_validate_image_resolution($this->non_image);
+    $errors = file_validate_image_dimensions($this->non_image);
     $this->assertEqual(count($errors), 0, 'Should not get any errors for a non-image file.', 'File');
-    $errors = file_validate_image_resolution($this->non_image, '50x50', '100x100');
+    $errors = file_validate_image_dimensions($this->non_image, '50x50', '100x100');
     $this->assertEqual(count($errors), 0, 'Do not check the resolution on non files.', 'File');
 
     // Minimum size.
-    $errors = file_validate_image_resolution($this->image);
+    $errors = file_validate_image_dimensions($this->image);
     $this->assertEqual(count($errors), 0, 'No errors for an image when there is no minimum or maximum resolution.', 'File');
-    $errors = file_validate_image_resolution($this->image, 0, '200x1');
+    $errors = file_validate_image_dimensions($this->image, '', '200x1');
     $this->assertEqual(count($errors), 1, 'Got an error for an image that was not wide enough.', 'File');
-    $errors = file_validate_image_resolution($this->image, 0, '1x200');
+    $errors = file_validate_image_dimensions($this->image, '', '1x200');
     $this->assertEqual(count($errors), 1, 'Got an error for an image that was not tall enough.', 'File');
-    $errors = file_validate_image_resolution($this->image, 0, '200x200');
+    $errors = file_validate_image_dimensions($this->image, '', '200x200');
     $this->assertEqual(count($errors), 1, 'Small images report an error.', 'File');
 
     // Maximum size.
@@ -84,7 +84,7 @@ function testFileValidateImageResolution() {
       copy('core/misc/druplicon.png', 'temporary://druplicon.png');
       $this->image->setFileUri('temporary://druplicon.png');
 
-      $errors = file_validate_image_resolution($this->image, '10x5');
+      $errors = file_validate_image_dimensions($this->image, '10x5');
       $this->assertEqual(count($errors), 0, 'No errors should be reported when an oversized image can be scaled down.', 'File');
 
       $image = $this->container->get('image.factory')->get($this->image->getFileUri());
@@ -95,7 +95,7 @@ function testFileValidateImageResolution() {
     }
     else {
       // TODO: should check that the error is returned if no toolkit is available.
-      $errors = file_validate_image_resolution($this->image, '5x10');
+      $errors = file_validate_image_dimensions($this->image, '5x10');
       $this->assertEqual(count($errors), 1, 'Oversize images that cannot be scaled get an error.', 'File');
     }
   }
diff --git a/core/modules/image/lib/Drupal/image/Plugin/field/widget/ImageWidget.php b/core/modules/image/lib/Drupal/image/Plugin/field/widget/ImageWidget.php
index 99c1eca..784719e 100644
--- a/core/modules/image/lib/Drupal/image/Plugin/field/widget/ImageWidget.php
+++ b/core/modules/image/lib/Drupal/image/Plugin/field/widget/ImageWidget.php
@@ -110,7 +110,7 @@ public function formElement(FieldInterface $items, $delta, array $element, array
 
     // Add upload resolution validation.
     if ($field_settings['max_resolution'] || $field_settings['min_resolution']) {
-      $element['#upload_validators']['file_validate_image_resolution'] = array($field_settings['max_resolution'], $field_settings['min_resolution']);
+      $element['#upload_validators']['file_validate_image_dimensions'] = array($field_settings['max_resolution'], $field_settings['min_resolution']);
     }
 
     // If not using custom extension validation, ensure this is an image.
