WordPress.org

Make WordPress Core

Ticket #34980: 34980.diff

File 34980.diff, 3.1 KB (added by flixos90, 4 years ago)

Fixes the bug by allowing multiple sizes of the same width*height

  • src/wp-includes/media.php

     
    647647                        }
    648648                        // If it's not an exact match but it's at least the dimensions requested.
    649649                        if ( $data['width'] >= $size[0] && $data['height'] >= $size[1] ) {
    650                                 $candidates[ $data['width'] * $data['height'] ] = $_size;
     650                                $pixels = $data['width'] * $data['height'];
     651                                if ( ! isset( $candidates[ $pixels ] ) ) {
     652                                        $candidates[ $pixels ] = array();
     653                                }
     654                                $candidates[ $pixels ][] = $_size;
    651655                        }
    652656                }
    653657
    654658                if ( ! empty( $candidates ) ) {
    655659                        // find for the smallest image not smaller than the desired size
    656660                        ksort( $candidates );
    657                         foreach ( $candidates as $_size ) {
    658                                 $data = $imagedata['sizes'][$_size];
     661                        foreach ( $candidates as $_candidates ) {
     662                                foreach ( $_candidates as $_size ) {
     663                                        $data = $imagedata['sizes'][$_size];
    659664
    660                                 // Skip images with unexpectedly divergent aspect ratios (crops)
    661                                 // First, we calculate what size the original image would be if constrained to a box the size of the current image in the loop
    662                                 $maybe_cropped = image_resize_dimensions($imagedata['width'], $imagedata['height'], $data['width'], $data['height'], false );
    663                                 // If the size doesn't match within one pixel, then it is of a different aspect ratio, so we skip it, unless it's the thumbnail size
    664                                 if ( 'thumbnail' != $_size &&
    665                                   ( ! $maybe_cropped
    666                                     || ( $maybe_cropped[4] != $data['width'] && $maybe_cropped[4] + 1 != $data['width'] )
    667                                     || ( $maybe_cropped[5] != $data['height'] && $maybe_cropped[5] + 1 != $data['height'] )
    668                                   ) ) {
    669                                   continue;
     665                                        // Skip images with unexpectedly divergent aspect ratios (crops)
     666                                        // First, we calculate what size the original image would be if constrained to a box the size of the current image in the loop
     667                                        $maybe_cropped = image_resize_dimensions($imagedata['width'], $imagedata['height'], $data['width'], $data['height'], false );
     668                                        // If the size doesn't match within one pixel, then it is of a different aspect ratio, so we skip it, unless it's the thumbnail size
     669                                        if ( 'thumbnail' != $_size &&
     670                                          ( ! $maybe_cropped
     671                                            || ( $maybe_cropped[4] != $data['width'] && $maybe_cropped[4] + 1 != $data['width'] )
     672                                            || ( $maybe_cropped[5] != $data['height'] && $maybe_cropped[5] + 1 != $data['height'] )
     673                                          ) ) {
     674                                          continue;
     675                                        }
     676                                        // If we're still here, then we're going to use this size.
     677                                        list( $data['width'], $data['height'] ) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );
     678
     679                                        /** This filter is documented in wp-includes/media.php */
     680                                        return apply_filters( 'image_get_intermediate_size', $data, $post_id, $size );
    670681                                }
    671                                 // If we're still here, then we're going to use this size.
    672                                 list( $data['width'], $data['height'] ) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );
    673 
    674                                 /** This filter is documented in wp-includes/media.php */
    675                                 return apply_filters( 'image_get_intermediate_size', $data, $post_id, $size );
    676682                        }
    677683                }
    678684        }