Index: src/wp-includes/functions.php
===================================================================
--- src/wp-includes/functions.php	(revision 45543)
+++ src/wp-includes/functions.php	(working copy)
@@ -7166,3 +7166,19 @@
 function is_php_version_compatible( $required ) {
 	return empty( $required ) || version_compare( phpversion(), $required, '>=' );
 }
+
+/**
+ * Check if two integers are nearly the same.
+ * 
+ * This is similar to using `round()` but the precision is more fine-grained.
+ *
+ * @since 5.3.0
+ * 
+ * @param int $expected  The expected value.
+ * @param int $actual    The actual number.
+ * @param int $precision The allowed variation.
+ * @return bool Whether the numbers match whithin the specified precision.
+ */
+function wp_numbers_match( $expected, $actual, $precision = 1 ) {
+	return abs( (int) $expected - (int) $actual ) <= $precision;
+}
Index: src/wp-includes/media.php
===================================================================
--- src/wp-includes/media.php	(revision 45543)
+++ src/wp-includes/media.php	(working copy)
@@ -594,15 +594,49 @@
 		list( $new_w, $new_h ) = wp_constrain_dimensions( $orig_w, $orig_h, $dest_w, $dest_h );
 	}
 
-	// if the resulting image would be the same size or larger we don't want to resize it
-	if ( $new_w >= $orig_w && $new_h >= $orig_h && intval( $dest_w ) !== intval( $orig_w ) && intval( $dest_h ) !== intval( $orig_h ) ) {
-		return false;
+	// Stop if the destination size is larger than the original image dimensions.
+	if ( empty( $dest_h ) ) {
+		if ( $orig_w < $dest_w ) {
+			return false;
+		}
+	} elseif ( empty( $dest_w ) ) {
+		if ( $orig_h < $dest_h ) {
+			return false;
+		}
+	} else {
+		if ( $orig_w < $dest_w && $orig_h < $dest_h ) {
+			return false;
+		}
 	}
 
-	// the return array matches the parameters to imagecopyresampled()
+	if ( wp_numbers_match( $new_w, $orig_w ) && wp_numbers_match( $new_h, $orig_h ) ) {
+		// The new size has virtually identical dimensions as the original image.
+
+		/**
+		 * Filters the threshold value (in pixels) above which an image sub-size with identical
+		 * dimensions will be created. An image is considered larger if either its width or height
+		 * is greater than the threshold.
+		 *
+		 * In this case it makes sense to still "resize" large images as the new size will be optimised,
+		 * and the file size will be smaller. For example when the original image is a photo
+		 * uploaded directly from a camera.
+		 *
+		 * @since 5.3.0
+		 * 
+		 * @param int The filtered threshold value.
+		 * @param int Original image width.
+		 * @param int Original image height.
+		 */
+		$threshold = (int) apply_filters( 'wp_image_resize_identical_dimensions_threshold', 2560, $orig_w, $orig_h );
+
+		if ( $orig_w <= $threshold && $orig_h <= $threshold ) {
+			return false;
+		}
+	}
+
+	// The return array matches the parameters to imagecopyresampled().
 	// int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h
 	return array( 0, 0, (int) $s_x, (int) $s_y, (int) $new_w, (int) $new_h, (int) $crop_w, (int) $crop_h );
-
 }
 
 /**
Index: tests/phpunit/tests/image/dimensions.php
===================================================================
--- tests/phpunit/tests/image/dimensions.php	(revision 45543)
+++ tests/phpunit/tests/image/dimensions.php	(working copy)
@@ -131,13 +131,25 @@
 	function test_640x480() {
 		// crop 640x480 to fit 640x480 (no change)
 		$out = image_resize_dimensions( 640, 480, 640, 480, true );
-		// dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h
-		$this->assertEquals( array( 0, 0, 0, 0, 640, 480, 640, 480 ), $out );
+		$this->assertFalse( $out );
 
 		// resize 640x480 to fit 640x480 (no change)
 		$out = image_resize_dimensions( 640, 480, 640, 480, false );
+		$this->assertFalse( $out );
+	}
+
+	function test_2570x600() {
+		// 2560 is the default threshold for creating identical sub-sizes.
+
+		// crop 2570x1825 to fit 2570x600 (no change)
+		$out = image_resize_dimensions( 2570, 600, 2570, 600, true );
 		// dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h
-		$this->assertEquals( array( 0, 0, 0, 0, 640, 480, 640, 480 ), $out );
+		$this->assertEquals( array( 0, 0, 0, 0, 2570, 600, 2570, 600 ), $out );
+
+		// resize 2570x1825 to fit 2570x1825 (no change)
+		$out = image_resize_dimensions( 2570, 600, 2570, 600, false );
+		// dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h
+		$this->assertEquals( array( 0, 0, 0, 0, 2570, 600, 2570, 600 ), $out );
 	}
 
 	/**
