diff --git a/core/lib/Drupal/Core/Image/Image.php b/core/lib/Drupal/Core/Image/Image.php
index 7a64355..882b5ba 100644
--- a/core/lib/Drupal/Core/Image/Image.php
+++ b/core/lib/Drupal/Core/Image/Image.php
@@ -34,13 +34,6 @@ class Image implements ImageInterface {
   protected $toolkit;
 
   /**
-   * Image type represented by a PHP IMAGETYPE_* constant (e.g. IMAGETYPE_JPEG).
-   *
-   * @var int
-   */
-  protected $type;
-
-  /**
    * File size in bytes.
    *
    * @var int
@@ -74,14 +67,7 @@ public function __construct($source, ImageToolkitInterface $toolkit) {
   /**
    * {@inheritdoc}
    */
-  public function isSupported() {
-    return in_array($this->getType(), $this->toolkit->supportedTypes());
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isExisting() {
+  public function isValid() {
     $this->processInfo();
     return $this->processed;
   }
@@ -113,17 +99,9 @@ public function getFileSize() {
   /**
    * {@inheritdoc}
    */
-  public function getType() {
-    $this->processInfo();
-    return $this->type;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function getMimeType() {
     $this->processInfo();
-    return $this->type ? image_type_to_mime_type($this->type) : '';
+    return $this->toolkit->getMimeType($this);
   }
 
   /**
@@ -198,13 +176,13 @@ protected function processInfo() {
       return FALSE;
     }
 
-    if ($details = $this->toolkit->getInfo($this)) {
-      $this->type = $details['type'];
+    if ($this->toolkit->getInfo($this)) {
       $this->fileSize = filesize($destination);
-
       $this->processed = TRUE;
+      return TRUE;
     }
-    return TRUE;
+
+    return FALSE;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Image/ImageFactory.php b/core/lib/Drupal/Core/Image/ImageFactory.php
index 3bff021..d218510 100644
--- a/core/lib/Drupal/Core/Image/ImageFactory.php
+++ b/core/lib/Drupal/Core/Image/ImageFactory.php
@@ -80,6 +80,23 @@ public function get($source, $toolkit_id = NULL) {
   }
 
   /**
+   * Returns the image file extensions supported by the toolkit.
+   *
+   * @param string $toolkit_id
+   *   (Optional) The image toolkit ID to use for checking.
+   *
+   * @return array
+   *   An array of supported image file extensions (e.g. png/jpeg/gif).
+   *
+   * @see \Drupal\Core\ImageToolkit\ImageToolkitInterface::getSupportedExtensions()
+   */
+  public function getSupportedExtensions($toolkit_id = NULL) {
+    $toolkit_id = $this->resolveToolkitId($toolkit_id);
+    $definition = $this->toolkitManager->getDefinition($toolkit_id);
+    return call_user_func($definition['class'] . '::getSupportedExtensions');
+  }
+
+  /**
    * Resolves a toolkit ID.
    *
    * @param string $toolkit_id
diff --git a/core/lib/Drupal/Core/Image/ImageInterface.php b/core/lib/Drupal/Core/Image/ImageInterface.php
index bf782a7..985dad1 100644
--- a/core/lib/Drupal/Core/Image/ImageInterface.php
+++ b/core/lib/Drupal/Core/Image/ImageInterface.php
@@ -13,20 +13,12 @@
 interface ImageInterface {
 
   /**
-   * Checks if the image format is supported.
+   * Checks if the image is valid.
    *
    * @return bool
-   *   Returns TRUE if the image format is supported by the toolkit.
+   *   TRUE if the image objects contains a valid image, FALSE otherwise.
    */
-  public function isSupported();
-
-  /**
-   * Checks if the image is existing.
-   *
-   * @return bool
-   *   TRUE if the image exists and is a valid image, FALSE otherwise.
-   */
-  public function isExisting();
+  public function isValid();
 
   /**
    * Returns the height of the image.
@@ -53,15 +45,6 @@ public function getWidth();
   public function getFileSize();
 
   /**
-   * Returns the type of the image.
-   *
-   * @return int
-   *   The image type represented by a PHP IMAGETYPE_* constant (e.g.
-   *   IMAGETYPE_JPEG).
-   */
-  public function getType();
-
-  /**
    * Returns the MIME type of the image file.
    *
    * @return string
diff --git a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php
index 8ca05a2..17421a7 100644
--- a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php
+++ b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php
@@ -190,10 +190,8 @@ public function scaleAndCrop(ImageInterface $image, $width, $height);
    * @param \Drupal\Core\Image\ImageInterface $image
    *   An image object.
    *
-   * @return array|FALSE
-   *   FALSE, if the file could not be found or is not an image. Otherwise, a
-   *   keyed array containing information about the image:
-   *   - "type": Image type represented as an IMAGETYPE_* constant.
+   * @return bool
+   *   TRUE, if the file could be found and is an image. Otherwise, FALSE.
    *
    * @see \Drupal\Core\Image\ImageInterface::processInfo()
    */
@@ -222,6 +220,18 @@ public function getHeight(ImageInterface $image);
   public function getWidth(ImageInterface $image);
 
   /**
+   * Returns the MIME type of the image file.
+   *
+   * @param \Drupal\Core\Image\ImageInterface $image
+   *   An image object.
+   *
+   * @return string
+   *   The MIME type of the image file, or an empty string if the image is
+   *   invalid.
+   */
+  public function getMimeType(ImageInterface $image);
+
+  /**
    * Gets toolkit requirements in a format suitable for hook_requirements().
    *
    * @return array
@@ -244,12 +254,11 @@ public function getRequirements();
   public static function isAvailable();
 
   /**
-   * Returns a list of image types supported by the toolkit.
+   * Returns a list of image file extensions supported by the toolkit.
    *
    * @return array
-   *   An array of available image types. An image type is represented by a PHP
-   *   IMAGETYPE_* constant (e.g. IMAGETYPE_JPEG, IMAGETYPE_PNG, etc.).
+   *   An array of supported image file extensions (e.g. png/jpeg/gif).
    */
-  public static function supportedTypes();
+  public static function getSupportedExtensions();
 
 }
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 67e5452..41b8433 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -391,7 +391,7 @@ function file_validate_size(File $file, $file_limit = 0, $user_limit = 0) {
 }
 
 /**
- * Checks that the file is recognized by Image::getInfo() as an image.
+ * Checks that the file is recognized by Image::processInfo() as an image.
  *
  * @param \Drupal\file\File $file
  *   A file entity.
@@ -404,14 +404,9 @@ function file_validate_size(File $file, $file_limit = 0, $user_limit = 0) {
 function file_validate_is_image(File $file) {
   $errors = array();
 
-  $image = \Drupal::service('image.factory')->get($file->getFileUri());
-  if (!$image->isSupported()) {
-    $toolkit = \Drupal::service('image.toolkit.manager')->getDefaultToolkit();
-    $extensions = array();
-    foreach ($toolkit->supportedTypes() as $image_type) {
-      $extensions[] = Unicode::strtoupper(image_type_to_extension($image_type));
-    }
-    $errors[] = t('Image type not supported. Allowed types: @types.', array('@types' => implode(', ', $extensions)));
+  $image_factory = \Drupal::service('image.factory');
+  if (!$image_factory->get($file->getFileUri())->isValid()) {
+    $errors[] = t('Image type not supported. Allowed types: %types', array('%types' => implode(' ', $image_factory->getSupportedExtensions())));
   }
 
   return $errors;
@@ -446,21 +441,19 @@ function file_validate_image_resolution(File $file, $maximum_dimensions = 0, $mi
   // Check first that the file is an image.
   $image_factory = \Drupal::service('image.factory');
   $image = $image_factory->get($file->getFileUri());
-  if ($image->isSupported()) {
+  if ($image->isValid()) {
     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->isExisting()) {
-          $image->scale($width, $height);
+        if ($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)));
         }
         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 and an attempt to resize it failed.');
         }
       }
     }
diff --git a/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php b/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php
index d545ec5..906431c 100644
--- a/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php
+++ b/core/modules/file/lib/Drupal/file/Tests/ValidatorTest.php
@@ -91,6 +91,12 @@ function testFileValidateImageResolution() {
       $this->assertTrue($image->getWidth() <= 10, 'Image scaled to correct width.', 'File');
       $this->assertTrue($image->getHeight() <= 5, 'Image scaled to correct height.', 'File');
 
+      // Once again, now with negative width and height to force an error.
+      copy('core/misc/druplicon.png', 'temporary://druplicon.png');
+      $this->image->setFileUri('temporary://druplicon.png');
+      $errors = file_validate_image_resolution($this->image, '-10x-5');
+      $this->assertEqual(count($errors), 1, 'An error reported for an oversized image that can not be scaled down.', 'File');
+
       drupal_unlink('temporary://druplicon.png');
     }
     else {
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index c1420c1..9112ff2 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -201,7 +201,7 @@ function image_file_download($uri) {
 
     // Check that the file exists and is an image.
     $image = \Drupal::service('image.factory')->get($uri);
-    if ($image->isSupported()) {
+    if ($image->isValid()) {
       // Check the permissions of the original to grant access to this image.
       $headers = \Drupal::moduleHandler()->invokeAll('file_download', array($original_uri));
       // Confirm there's at least one module granting access and none denying access.
diff --git a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
index 1b3c8db..8c2ed67 100644
--- a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
@@ -278,7 +278,7 @@ public function createDerivative($original_uri, $derivative_uri) {
     }
 
     $image = \Drupal::service('image.factory')->get($original_uri);
-    if (!$image->isExisting()) {
+    if (!$image->isValid()) {
       return FALSE;
     }
 
diff --git a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldType/ImageItem.php b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldType/ImageItem.php
index 5442d17..c4d10df 100644
--- a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldType/ImageItem.php
+++ b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldType/ImageItem.php
@@ -290,7 +290,7 @@ public function preSave() {
     // Determine the dimensions if necessary.
     if (empty($width) || empty($height)) {
       $image = \Drupal::service('image.factory')->get($this->entity->getFileUri());
-      if ($image->isSupported()) {
+      if ($image->isValid()) {
         $this->width = $image->getWidth();
         $this->height =$image->getHeight();
       }
diff --git a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php
index cbb5c54..5712963 100644
--- a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php
+++ b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php
@@ -160,7 +160,7 @@ public static function process($element, &$form_state, $form) {
       }
       else {
         $image = \Drupal::service('image.factory')->get($file->getFileUri());
-        if ($image->isExisting()) {
+        if ($image->isValid()) {
           $variables['width'] = $image->getWidth();
           $variables['height'] = $image->getHeight();
         }
diff --git a/core/modules/system/lib/Drupal/system/Plugin/ImageToolkit/GDToolkit.php b/core/modules/system/lib/Drupal/system/Plugin/ImageToolkit/GDToolkit.php
index b6ce30c..6013616 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/ImageToolkit/GDToolkit.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/ImageToolkit/GDToolkit.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\system\Plugin\ImageToolkit;
 
+use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Image\ImageInterface;
 use Drupal\Core\ImageToolkit\ImageToolkitBase;
 use Drupal\Component\Utility\Image as ImageUtility;
@@ -29,6 +30,13 @@ class GDToolkit extends ImageToolkitBase {
   protected $resource;
 
   /**
+   * Image type represented by a PHP IMAGETYPE_* constant (e.g. IMAGETYPE_JPEG).
+   *
+   * @var int
+   */
+  protected $type;
+
+  /**
    * Sets the GD image resource.
    *
    * @param resource $resource
@@ -86,7 +94,11 @@ public function resize(ImageInterface $image, $width, $height) {
     $width = (int) round($width);
     $height = (int) round($height);
 
-    $res = $this->createTmp($image->getType(), $width, $height);
+    if ($width < 0 || $height < 0) {
+      return FALSE;
+    }
+
+    $res = $this->createTmp($this->getType(), $width, $height);
 
     if (!imagecopyresampled($res, $this->getResource(), 0, 0, 0, 0, $width, $height, $this->getWidth($image), $this->getHeight($image))) {
       return FALSE;
@@ -129,7 +141,7 @@ public function rotate(ImageInterface $image, $degrees, $background = NULL) {
 
     // Images are assigned a new color palette when rotating, removing any
     // transparency flags. For GIF images, keep a record of the transparent color.
-    if ($image->getType() == IMAGETYPE_GIF) {
+    if ($this->getType() == IMAGETYPE_GIF) {
       $transparent_index = imagecolortransparent($this->getResource());
       if ($transparent_index != 0) {
         $transparent_gif_color = imagecolorsforindex($this->getResource(), $transparent_index);
@@ -159,7 +171,11 @@ public function crop(ImageInterface $image, $x, $y, $width, $height) {
     $width = (int) round($width);
     $height = (int) round($height);
 
-    $res = $this->createTmp($image->getType(), $width, $height);
+    if ($width < 0 || $height < 0) {
+      return FALSE;
+    }
+
+    $res = $this->createTmp($this->getType(), $width, $height);
 
     if (!imagecopyresampled($res, $this->getResource(), 0, 0, $x, $y, $width, $height, $width, $height)) {
       return FALSE;
@@ -225,20 +241,18 @@ public function scaleAndCrop(ImageInterface $image, $width, $height) {
    *
    * @param string $source
    *   String specifying the path of the image file.
-   * @param array $details
-   *   An array of image details.
    *
    * @return bool
    *   TRUE or FALSE, based on success.
    */
-  protected function load($source, array $details) {
-    $function = 'imagecreatefrom' . image_type_to_extension($details['type'], FALSE);
+  protected function load($source) {
+    $function = 'imagecreatefrom' . image_type_to_extension($this->getType(), FALSE);
     if (function_exists($function) && $resource = $function($source)) {
       $this->setResource($resource);
       if (!imageistruecolor($resource)) {
         // Convert indexed images to true color, so that filters work
         // correctly and don't result in unnecessary dither.
-        $new_image = $this->createTmp($details['type'], imagesx($resource), imagesy($resource));
+        $new_image = $this->createTmp($this->getType(), imagesx($resource), imagesy($resource));
         imagecopy($new_image, $resource, 0, 0, 0, 0, imagesx($resource), imagesy($resource));
         imagedestroy($resource);
         $this->setResource($new_image);
@@ -266,16 +280,16 @@ public function save(ImageInterface $image, $destination) {
       $destination = drupal_realpath($destination);
     }
 
-    $function = 'image' . image_type_to_extension($image->getType(), FALSE);
+    $function = 'image' . image_type_to_extension($this->getType(), FALSE);
     if (!function_exists($function)) {
       return FALSE;
     }
-    if ($image->getType() == IMAGETYPE_JPEG) {
+    if ($this->getType() == IMAGETYPE_JPEG) {
       $success = $function($this->getResource(), $destination, \Drupal::config('system.image.gd')->get('jpeg_quality'));
     }
     else {
       // Always save PNG images with full transparency.
-      if ($image->getType() == IMAGETYPE_PNG) {
+      if ($this->getType() == IMAGETYPE_PNG) {
         imagealphablending($this->getResource(), FALSE);
         imagesavealpha($this->getResource(), TRUE);
       }
@@ -292,19 +306,15 @@ public function save(ImageInterface $image, $destination) {
    * {@inheritdoc}
    */
   public function getInfo(ImageInterface $image) {
-    $details = FALSE;
+
     $data = getimagesize($image->getSource());
 
     if (isset($data) && is_array($data) && in_array($data[2], static::supportedTypes())) {
-      $details = array(
-        'type'      => $data[2],
-      );
+      $this->type = $data[2];
+      return $this->load($image->getSource());
     }
 
-    if ($details) {
-      $this->load($image->getSource(), $details);
-    }
-    return $details;
+    return FALSE;
   }
 
   /**
@@ -367,6 +377,24 @@ public function getHeight(ImageInterface $image) {
   }
 
   /**
+   * Returns the type of the image.
+   *
+   * @return int
+   *   The image type represented by a PHP IMAGETYPE_* constant (e.g.
+   *   IMAGETYPE_JPEG).
+   */
+  public function getType() {
+    return $this->type;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getMimeType(ImageInterface $image) {
+    return $this->getType() ? image_type_to_mime_type($this->getType()) : '';
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getRequirements() {
@@ -398,7 +426,22 @@ public static function isAvailable() {
   /**
    * {@inheritdoc}
    */
-  public static function supportedTypes() {
+  public static function getSupportedExtensions() {
+    $extensions = array();
+    foreach (static::supportedTypes() as $image_type) {
+      $extensions[] = Unicode::strtolower(image_type_to_extension($image_type, FALSE));
+    }
+    return $extensions;
+  }
+
+  /**
+   * Returns a list of image types supported by the toolkit.
+   *
+   * @return array
+   *   An array of available image types. An image type is represented by a PHP
+   *   IMAGETYPE_* constant (e.g. IMAGETYPE_JPEG, IMAGETYPE_PNG, etc.).
+   */
+  protected static function supportedTypes() {
     return array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitGdTest.php b/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitGdTest.php
index 4c9a668..c26a750 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitGdTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitGdTest.php
@@ -247,7 +247,7 @@ function testManipulations() {
         $image_truecolor = imageistruecolor($toolkit->getResource());
         $this->assertTrue($image_truecolor, String::format('Image %file after load is a truecolor image.', array('%file' => $file)));
 
-        if ($image->getType() == IMAGETYPE_GIF) {
+        if ($image->getToolkit()->getType() == IMAGETYPE_GIF) {
           if ($op == 'desaturate') {
             // Transparent GIFs and the imagefilter function don't work together.
             $values['corners'][3][3] = 0;
@@ -274,13 +274,13 @@ function testManipulations() {
 
         $directory = $this->public_files_directory .'/imagetest';
         file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
-        $image->save($directory . '/' . $op . image_type_to_extension($image->getType()));
+        $image->save($directory . '/' . $op . image_type_to_extension($image->getToolkit()->getType()));
 
         $this->assertTrue($correct_dimensions_real, String::format('Image %file after %action action has proper dimensions.', array('%file' => $file, '%action' => $op)));
         $this->assertTrue($correct_dimensions_object, String::format('Image %file object after %action action is reporting the proper height and width values.', array('%file' => $file, '%action' => $op)));
 
         // JPEG colors will always be messed up due to compression.
-        if ($image->getType() != IMAGETYPE_JPEG) {
+        if ($image->getToolkit()->getType() != IMAGETYPE_JPEG) {
           // Now check each of the corners to ensure color correctness.
           foreach ($values['corners'] as $key => $corner) {
             // Get the location of the corner.
diff --git a/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitTestBase.php
index 846e6e5..32dfeb3 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Image/ToolkitTestBase.php
@@ -68,7 +68,7 @@ function setUp() {
    */
   protected function getImage() {
     $image = $this->imageFactory->get($this->file, 'test');
-    $this->assertTrue($image->isExisting(), 'Image was loaded.');
+    $this->assertTrue($image->isValid(), 'Image was loaded.');
     return $image;
   }
 
diff --git a/core/modules/system/tests/modules/image_test/lib/Drupal/image_test/Plugin/ImageToolkit/TestToolkit.php b/core/modules/system/tests/modules/image_test/lib/Drupal/image_test/Plugin/ImageToolkit/TestToolkit.php
index 8ee44dd..2688c6e 100644
--- a/core/modules/system/tests/modules/image_test/lib/Drupal/image_test/Plugin/ImageToolkit/TestToolkit.php
+++ b/core/modules/system/tests/modules/image_test/lib/Drupal/image_test/Plugin/ImageToolkit/TestToolkit.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\image_test\Plugin\ImageToolkit;
 
+use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Image\ImageInterface;
 use Drupal\Core\ImageToolkit\ImageToolkitBase;
 
@@ -21,6 +22,13 @@
 class TestToolkit extends ImageToolkitBase {
 
   /**
+   * Image type represented by a PHP IMAGETYPE_* constant (e.g. IMAGETYPE_JPEG).
+   *
+   * @var int
+   */
+  protected $type;
+
+  /**
    * The width of the image.
    *
    * @var int
@@ -189,6 +197,24 @@ public function getHeight(ImageInterface $image) {
   }
 
   /**
+   * Returns the type of the image.
+   *
+   * @return int
+   *   The image type represented by a PHP IMAGETYPE_* constant (e.g.
+   *   IMAGETYPE_JPEG).
+   */
+  public function getType() {
+    return $this->type;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getMimeType(ImageInterface $image) {
+    return $this->getType() ? image_type_to_mime_type($this->getType()) : '';
+  }
+
+  /**
    * {@inheritdoc}
    */
   public static function isAvailable() {
@@ -198,7 +224,22 @@ public static function isAvailable() {
   /**
    * {@inheritdoc}
    */
-  public static function supportedTypes() {
+  public static function getSupportedExtensions() {
+    $extensions = array();
+    foreach (static::supportedTypes() as $image_type) {
+      $extensions[] = Unicode::strtolower(image_type_to_extension($image_type, FALSE));
+    }
+    return $extensions;
+  }
+
+  /**
+   * Returns a list of image types supported by the toolkit.
+   *
+   * @return array
+   *   An array of available image types. An image type is represented by a PHP
+   *   IMAGETYPE_* constant (e.g. IMAGETYPE_JPEG, IMAGETYPE_PNG, etc.).
+   */
+  protected static function supportedTypes() {
     return array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Image/ImageTest.php b/core/tests/Drupal/Tests/Core/Image/ImageTest.php
index 43a8740..4c932e6 100644
--- a/core/tests/Drupal/Tests/Core/Image/ImageTest.php
+++ b/core/tests/Drupal/Tests/Core/Image/ImageTest.php
@@ -88,10 +88,10 @@ public function testGetFileSize() {
   }
 
   /**
-   * Tests \Drupal\Core\Image\Image::getType().
+   * Tests \Drupal\Core\Image\Image::getToolkit()->getType().
    */
   public function testGetType() {
-    $this->assertEquals($this->image->getType(), IMAGETYPE_PNG);
+    $this->assertEquals($this->image->getToolkit()->getType(), IMAGETYPE_PNG);
   }
 
   /**
@@ -102,10 +102,10 @@ public function testGetMimeType() {
   }
 
   /**
-   * Tests \Drupal\Core\Image\Image::isExisting().
+   * Tests \Drupal\Core\Image\Image::isValid().
    */
-  public function testIsExisting() {
-    $this->assertTrue($this->image->isExisting());
+  public function testIsValid() {
+    $this->assertTrue($this->image->isValid());
     $this->assertTrue(is_readable($this->image->getSource()));
   }
 
@@ -178,7 +178,7 @@ public function testProcessInfoFails() {
     $toolkit = $this->getToolkitMock();
     $image = new Image('magic-foobars.png', $toolkit);
 
-    $this->assertFalse($image->isExisting());
+    $this->assertFalse($image->isValid());
   }
 
   /**
