diff --git a/src/wp-includes/class-wp-image-editor-gd.php b/src/wp-includes/class-wp-image-editor-gd.php
index 32f33dfa6e..13fe637053 100644
--- a/src/wp-includes/class-wp-image-editor-gd.php
+++ b/src/wp-includes/class-wp-image-editor-gd.php
@@ -136,6 +136,27 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
 		return parent::update_size( $width, $height );
 	}
 
+	/**
+	 * Sets or updates current image size.
+	 *
+	 * @since 5.1.0
+	 *
+	 * @param bool|array $crop
+	 * @param int $dst_w
+	 * @param int $dst_h
+	 * @return true
+	 */
+	protected function update_crop_hash( $crop, $dst_w, $dst_h ) {
+		if ( ! is_array($crop) ) {
+			return false;
+		}
+
+		$str = $crop[0] . $crop[1] . $dst_w . $dst_h;
+		$hash = substr( md5( $str ), 0, 8 );
+		
+		return parent::update_crop_hash( $hash );
+	}
+
 	/**
 	 * Resizes current image.
 	 * Wraps _resize, since _resize returns a GD Resource.
@@ -187,6 +208,7 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
 		imagecopyresampled( $resized, $this->image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );
 
 		if ( is_resource( $resized ) ) {
+			$this->update_crop_hash( $crop, $dst_w, $dst_h );
 			$this->update_size( $dst_w, $dst_h );
 			return $resized;
 		}
@@ -217,6 +239,7 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
 	 * @return array An array of resized images' metadata by size.
 	 */
 	public function multi_resize( $sizes ) {
+
 		$metadata  = array();
 		$orig_size = $this->size;
 
@@ -429,6 +452,7 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
 			'file'      => wp_basename( apply_filters( 'image_make_intermediate_size', $filename ) ),
 			'width'     => $this->size['width'],
 			'height'    => $this->size['height'],
+			'hash'    	=> $this->hash,
 			'mime-type' => $mime_type,
 		);
 	}
diff --git a/src/wp-includes/class-wp-image-editor-imagick.php b/src/wp-includes/class-wp-image-editor-imagick.php
index abb215038b..e1f304ffb9 100644
--- a/src/wp-includes/class-wp-image-editor-imagick.php
+++ b/src/wp-includes/class-wp-image-editor-imagick.php
@@ -237,6 +237,27 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 		return parent::update_size( $width, $height );
 	}
 
+	/**
+	 * Sets or updates current image size.
+	 *
+	 * @since 5.1.0
+	 *
+	 * @param bool|array $crop
+	 * @param int $dst_w
+	 * @param int $dst_h
+	 * @return true
+	 */
+	protected function update_crop_hash( $crop, $dst_w, $dst_h ) {
+		if ( ! is_array($crop) ) {
+			return false;
+		}
+
+		$str = $crop[0] . $crop[1] . $dst_w . $dst_h;
+		$hash = substr( md5( $str ), 0, 8 );
+		
+		return parent::update_crop_hash( $hash );
+	}
+
 	/**
 	 * Resizes current image.
 	 *
@@ -263,6 +284,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 		list( $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h ) = $dims;
 
 		if ( $crop ) {
+			$this->update_crop_hash( $crop, $dst_w, $dst_h );
 			return $this->crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h );
 		}
 
@@ -646,6 +668,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 			'file'      => wp_basename( apply_filters( 'image_make_intermediate_size', $filename ) ),
 			'width'     => $this->size['width'],
 			'height'    => $this->size['height'],
+			'hash'    	=> $this->hash,
 			'mime-type' => $mime_type,
 		);
 	}
diff --git a/src/wp-includes/class-wp-image-editor.php b/src/wp-includes/class-wp-image-editor.php
index 26dd78d230..c7b4d2c907 100644
--- a/src/wp-includes/class-wp-image-editor.php
+++ b/src/wp-includes/class-wp-image-editor.php
@@ -14,6 +14,7 @@
 abstract class WP_Image_Editor {
 	protected $file              = null;
 	protected $size              = null;
+	protected $hash         	 = null;
 	protected $mime_type         = null;
 	protected $default_mime_type = 'image/jpeg';
 	protected $quality           = false;
@@ -195,6 +196,31 @@ abstract class WP_Image_Editor {
 		return true;
 	}
 
+
+	/**
+	 * Gets current image hash (when crop position has been set).
+	 *
+	 * @since 5.1.0
+	 *
+	 * @return string $hash 8 character hash
+	 */
+	public function get_crop_hash() {
+		return $this->hash;
+	}
+
+	/**
+	 * Sets current image hash (when crop position has been set).
+	 *
+	 * @since 5.1.0
+	 *
+	 * @param string $hash
+	 * @return true
+	 */
+	protected function update_crop_hash( $hash = null ) {
+		$this->hash = $hash;
+		return true;
+	}
+
 	/**
 	 * Gets the Image Compression quality on a 1-100% scale.
 	 *
@@ -378,7 +404,13 @@ abstract class WP_Image_Editor {
 			return false;
 		}
 
-		return "{$this->size['width']}x{$this->size['height']}";
+		$suffix = "{$this->size['width']}x{$this->size['height']}";
+
+		if( $this->get_crop_hash() ){
+			$suffix = $suffix . "-{$this->hash}";
+		}
+		
+		return $suffix;
 	}
 
 	/**
