Make WordPress Core

Changeset 36031


Ignore:
Timestamp:
12/20/2015 02:38:34 AM (11 years ago)
Author:
azaozz
Message:

Responsive images: fix calculations when determining whether to include particular image file in srcset.

Props joemcgill.
Fixes #34955 for trunk.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/media.php

    r35820 r36031  
    10161016        $image_baseurl = trailingslashit( $image_baseurl );
    10171017
    1018         // Calculate the image aspect ratio.
    1019         $image_ratio = $image_height / $image_width;
    1020 
    10211018        /*
    10221019         * Images that have been edited in WordPress after being uploaded will
     
    10551052                }
    10561053
    1057                 // Calculate the new image ratio.
    1058                 if ( $image['width'] ) {
    1059                         $image_ratio_compare = $image['height'] / $image['width'];
     1054                /**
     1055                 * To check for varying crops, we calculate the expected size of the smaller
     1056                 * image if the larger were constrained by the width of the smaller and then
     1057                 * see if it matches what we're expecting.
     1058                 */
     1059                if ( $image_width > $image['width'] ) {
     1060                        $constrained_size = wp_constrain_dimensions( $image_width, $image_height, $image['width'] );
     1061                        $expected_size = array( $image['width'], $image['height'] );
    10601062                } else {
    1061                         $image_ratio_compare = 0;
    1062                 }
    1063 
    1064                 // If the new ratio differs by less than 0.002, use it.
    1065                 if ( abs( $image_ratio - $image_ratio_compare ) < 0.002 ) {
     1063                        $constrained_size = wp_constrain_dimensions( $image['width'], $image['height'], $image_width );
     1064                        $expected_size = array( $image_width, $image_height );
     1065                }
     1066
     1067                // If the image dimensions are within 1px of the expected size, use it.
     1068                if ( abs( $constrained_size[0] - $expected_size[0] ) <= 1 && abs( $constrained_size[1] - $expected_size[1] ) <= 1 ) {
    10661069                        // Add the URL, descriptor, and value to the sources array to be returned.
    10671070                        $sources[ $image['width'] ] = array(
  • trunk/tests/phpunit/tests/media.php

    r35820 r36031  
    890890                // The srcset should be false.
    891891                $this->assertFalse( $srcset );
     892        }
     893
     894        /**
     895         * @ticket 34955
     896         */
     897        function test_wp_calculate_image_srcset_ratio_variance() {
     898                // Mock data for this test.
     899                $size_array = array( 218, 300);
     900                $image_src = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/2015/12/test-768x1055-218x300.png';
     901                $image_meta = array(
     902                        'width' => 768,
     903                        'height' => 1055,
     904                        'file' => '2015/12/test-768x1055.png',
     905                        'sizes' => array(
     906                                'thumbnail' => array(
     907                                        'file' => 'test-768x1055-150x150.png',
     908                                        'width' => 150,
     909                                        'height' => 150,
     910                                        'mime-type' => 'image/png',
     911                                ),
     912                                'medium' => array(
     913                                        'file' => 'test-768x1055-218x300.png',
     914                                        'width' => 218,
     915                                        'height' => 300,
     916                                        'mime-type' => 'image/png',
     917                                ),
     918                                'custom-600' => array(
     919                                        'file' => 'test-768x1055-600x824.png',
     920                                        'width' => 600,
     921                                        'height' => 824,
     922                                        'mime-type' => 'image/png',
     923                                ),
     924                                'post-thumbnail' => array(
     925                                        'file' => 'test-768x1055-768x510.png',
     926                                        'width' => 768,
     927                                        'height' => 510,
     928                                        'mime-type' => 'image/png',
     929                                ),
     930                        ),
     931                );
     932
     933                $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';
     934
     935                $this->assertSame( $expected_srcset, wp_calculate_image_srcset( $size_array, $image_src, $image_meta ) );
    892936        }
    893937
Note: See TracChangeset for help on using the changeset viewer.