diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php
new file mode 100644
index 0000000..1e07538
--- /dev/null
+++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageUrlFormatter.php
@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\image\Plugin\Field\FieldFormatter\ImageUrlFormatter.
+ */
+
+namespace Drupal\image\Plugin\Field\FieldFormatter;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+
+/**
+ * Plugin implementation of the 'image_url' formatter.
+ *
+ * @FieldFormatter(
+ *   id = "image_url",
+ *   label = @Translation("URL to image"),
+ *   field_types = {
+ *     "image"
+ *   }
+ * )
+ */
+class ImageUrlFormatter extends ImageFormatter {
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, FormStateInterface $form_state) {
+    $image_styles = image_style_options(FALSE);
+    $element['image_style'] = array(
+      '#title' => t('Image style'),
+      '#type' => 'select',
+      '#default_value' => $this->getSetting('image_style'),
+      '#empty_option' => t('None (original image)'),
+      '#options' => $image_styles,
+      '#description' => array(
+        '#markup' => $this->linkGenerator->generate($this->t('Configure Image Styles'), new Url('entity.image_style.collection')),
+        '#access' => $this->currentUser->hasPermission('administer image styles'),
+      ),
+    );
+
+    return $element;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function viewElements(FieldItemListInterface $items) {
+    $elements = array();
+    $images = $this->getEntitiesToView($items);
+
+    // Early opt-out if the field is empty.
+    if (empty($images)) {
+      return $elements;
+    }
+
+    $url = NULL;
+
+    $image_style_setting = $this->getSetting('image_style');
+
+    // Collect cache tags to be added for each item in the field.
+    $cache_tags = [];
+    if (!empty($image_style_setting)) {
+      $image_style = $this->imageStyleStorage->load($image_style_setting);
+      $cache_tags = $image_style->getCacheTags();
+    }
+
+    foreach ($images as $delta => $image) {
+      $image_uri = $image->getFileUri();
+      $url = $image_style
+        ? $image_style->buildUrl($image_uri)
+        : file_create_url($image_uri);
+
+      $cache_tags = Cache::mergeTags($cache_tags, $image->getCacheTags());
+
+      $elements[$delta] = array(
+        '#markup' => $url,
+        '#cache' => array(
+          'tags' => $cache_tags,
+        ),
+      );
+    }
+
+    return $elements;
+  }
+}
