From af0d39b38b1088db7a6f2134504000497a0c01b3 Mon Sep 17 00:00:00 2001 From: Mark Jaquith Date: Sun, 14 Feb 2010 08:21:07 +0000 Subject: [PATCH] Skip intermediate sizes of a different aspect ratio than the original image when considering which image to use in image_get_intermediate_size(). fixes #12218 git-svn-id: https://develop.svn.wordpress.org/trunk@13145 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-includes/media.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/wp-includes/media.php b/wp-includes/media.php index ca27a95582..d4d373d29a 100644 --- a/wp-includes/media.php +++ b/wp-includes/media.php @@ -484,6 +484,13 @@ function image_get_intermediate_size($post_id, $size='thumbnail') { foreach ( $areas as $_size ) { $data = $imagedata['sizes'][$_size]; if ( $data['width'] >= $size[0] || $data['height'] >= $size[1] ) { + // Skip images with unexpectedly divergent aspect ratios (crops) + // First, we calculate what size the original image would be if constrained to a box the size of the current image in the loop + $maybe_cropped = image_resize_dimensions($imagedata['width'], $imagedata['height'], $data['width'], $data['height'], false ); + // If the size doesn't match exactly, then it is of a different aspect ratio, so we skip it, unless it's the thumbnail size + if ( 'thumbnail' != $_size && ( !$maybe_cropped || $maybe_cropped[0] != $data['width'] || $maybe_cropped[1] != $data['height'] ) ) + continue; + // If we're still here, then we're going to use this size $file = $data['file']; list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size ); return compact( 'file', 'width', 'height' );