WordPress.org

Make WordPress Core

Ticket #17626: media.php.sortimagedata.diff

File media.php.sortimagedata.diff, 1.6 KB (added by chipbennett, 7 years ago)

Replaced usort() with uasort(), per @scribu's recommendation

  • media.php

     
    528528
    529529        // get the best one for a specified set of dimensions
    530530        if ( is_array($size) && !empty($imagedata['sizes']) ) {
     531                // sort $imagemeta['sizes'] descending by width, height
     532                function compare_sizes( $a, $b ) {
     533                        $sorted = strnatcmp( $a['width'], $b['width'] );
     534                        if( ! $sorted ) return strnatcmp( $a['height'], $b['height'] );
     535                        array_reverse( $sorted );
     536                        return $sorted;
     537                }
     538                uasort( $imagedata['sizes'], 'compare_sizes' );
     539                // loop through $imagemeta['sizes'] to find the right thumbnail size
    531540                foreach ( $imagedata['sizes'] as $_size => $data ) {
     541                        // already cropped exactly to width and height; so use this size
     542                        if ( $data['width'] == $size[0] && $data['height'] == $size[1] ) {
     543                                $file = $data['file'];
     544                                list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );
     545                                return compact( 'file', 'width', 'height' );
     546                        }
    532547                        // already cropped to width or height; so use this size
    533                         if ( ( $data['width'] == $size[0] && $data['height'] <= $size[1] ) || ( $data['height'] == $size[1] && $data['width'] <= $size[0] ) ) {
     548                        else if ( ( $data['width'] == $size[0] && $data['height'] <= $size[1] ) || ( $data['height'] == $size[1] && $data['width'] <= $size[0] ) ) {
    534549                                $file = $data['file'];
    535550                                list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );
    536551                                return compact( 'file', 'width', 'height' );