diff --git src/wp-includes/media.php src/wp-includes/media.php
index 89b88df..68fa843 100644
--- src/wp-includes/media.php
+++ src/wp-includes/media.php
@@ -1015,9 +1015,6 @@ function wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attac
 
 	$image_baseurl = trailingslashit( $image_baseurl );
 
-	// Calculate the image aspect ratio.
-	$image_ratio = $image_height / $image_width;
-
 	/*
 	 * Images that have been edited in WordPress after being uploaded will
 	 * contain a unique hash. Look for that hash and use it later to filter
@@ -1054,15 +1051,21 @@ function wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attac
 			continue;
 		}
 
-		// Calculate the new image ratio.
-		if ( $image['width'] ) {
-			$image_ratio_compare = $image['height'] / $image['width'];
+		/**
+		 * To check for varying crops, we calculate the expected size of the smaller
+		 * image if the larger were contstrained by the width of the smaller and then
+		 * see if it matches what we're expecting.
+		 */
+		if ( $image_width > $image['width'] ) {
+			$constrained_size = wp_constrain_dimensions( $image_width, $image_height, $image['width'] );
+			$expected_size = array( $image['width'], $image['height'] );
 		} else {
-			$image_ratio_compare = 0;
+			$constrained_size = wp_constrain_dimensions( $image['width'], $image['height'], $image_width );
+			$expected_size = array( $image_width, $image_height );
 		}
 
-		// If the new ratio differs by less than 0.002, use it.
-		if ( abs( $image_ratio - $image_ratio_compare ) < 0.002 ) {
+		// If the image dimensions are within 1px of the expected size, use it.
+		if ( abs( $constrained_size[0] - $expected_size[0] ) <= 1 && abs( $constrained_size[1] - $expected_size[1] ) <= 1 ) {
 			// Add the URL, descriptor, and value to the sources array to be returned.
 			$sources[ $image['width'] ] = array(
 				'url'        => $image_baseurl . $image['file'],
diff --git tests/phpunit/tests/media.php tests/phpunit/tests/media.php
index 3da75a0..d6fcd95 100644
--- tests/phpunit/tests/media.php
+++ tests/phpunit/tests/media.php
@@ -892,6 +892,51 @@ EOF;
 	}
 
 	/**
+	 * @ticket 34955
+	 */
+	function test_wp_calculate_image_srcset_ratio_variance() {
+		// Mock data for this test.
+		$size_array = array( 218, 300);
+		$image_src = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/2015/12/test-768x1055-218x300.png';
+		$image_meta = array(
+			'width' => 768,
+			'height' => 1055,
+			'file' => '2015/12/test-768x1055.png',
+			'sizes' => array(
+				'thumbnail' => array(
+					'file' => 'test-768x1055-150x150.png',
+					'width' => 150,
+					'height' => 150,
+					'mime-type' => 'image/png',
+				),
+				'medium' => array(
+					'file' => 'test-768x1055-218x300.png',
+					'width' => 218,
+					'height' => 300,
+					'mime-type' => 'image/png',
+				),
+				'custom-600' => array(
+					'file' => 'test-768x1055-600x824.png',
+					'width' => 600,
+					'height' => 824,
+					'mime-type' => 'image/png',
+				),
+				'post-thumbnail' => array(
+					'file' => 'test-768x1055-768x510.png',
+					'width' => 768,
+					'height' => 510,
+					'mime-type' => 'image/png',
+				),
+			),
+		);
+
+		$expected_srcset = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/2015/12/test-768x1055-218x300.png 218w, http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/2015/12/test-768x1055-600x824.png 600w, http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/2015/12/test-768x1055.png 768w';
+
+		$this->assertSame( $expected_srcset, wp_calculate_image_srcset( $size_array, $image_src, $image_meta ) );
+	}
+
+
+	/**
 	 * @ticket 33641
 	 */
 	function test_wp_get_attachment_image_srcset() {
