Make WordPress Core

Ticket #39231: 39231.patch

File 39231.patch, 3.8 KB (added by gitlost, 9 years ago)

Process add_image_sizes() also.

  • src/wp-admin/includes/image.php

     
    221221                $fallback_sizes = apply_filters( 'fallback_intermediate_image_sizes', $fallback_sizes, $metadata );
    222222
    223223                $sizes = array();
     224                $_wp_additional_image_sizes = wp_get_additional_image_sizes();
    224225
    225226                foreach ( $fallback_sizes as $s ) {
    226                         $sizes[ $s ]['width']  = get_option( "{$s}_size_w" );
    227                         $sizes[ $s ]['height'] = get_option( "{$s}_size_h" );
     227                        if ( isset( $_wp_additional_image_sizes[ $s ]['width'] ) ) {
     228                                $sizes[ $s ]['width'] = intval( $_wp_additional_image_sizes[ $s ]['width'] );
     229                        } else {
     230                                $sizes[ $s ]['width'] = get_option( "{$s}_size_w" );
     231                        }
    228232
    229                         // Force thumbnails to be soft crops.
    230                         if ( ! 'thumbnail' === $s ) {
    231                                 $sizes[ $s ]['crop'] = get_option( "{$s}_crop" );
     233                        if ( isset( $_wp_additional_image_sizes[ $s ]['height'] ) ) {
     234                                $sizes[ $s ]['height'] = intval( $_wp_additional_image_sizes[ $s ]['height'] );
     235                        } else {
     236                                $sizes[ $s ]['height'] = get_option( "{$s}_size_h" );
    232237                        }
     238
     239                        if ( isset( $_wp_additional_image_sizes[ $s ]['crop'] ) ) {
     240                                $sizes[ $s ]['crop'] = $_wp_additional_image_sizes[ $s ]['crop'];
     241                        } else {
     242                                // Force thumbnails to be soft crops.
     243                                if ( ! 'thumbnail' === $s ) {
     244                                        $sizes[ $s ]['crop'] = get_option( "{$s}_crop" );
     245                                }
     246                        }
    233247                }
    234248
    235249                // Only load PDFs in an image editor if we're processing sizes.
  • tests/phpunit/tests/image/functions.php

     
    404404
    405405                unlink( $test_file );
    406406        }
     407
     408        /**
     409         * @ticket 39231
     410         */
     411        public function test_fallback_intermediate_image_sizes() {
     412                if ( ! wp_image_editor_supports( array( 'mime_type' => 'application/pdf' ) ) ) {
     413                        $this->markTestSkipped( 'Rendering PDFs is not supported on this system.' );
     414                }
     415
     416                $orig_file = DIR_TESTDATA . '/images/wordpress-gsoc-flyer.pdf';
     417                $test_file = '/tmp/wordpress-gsoc-flyer.pdf';
     418                copy( $orig_file, $test_file );
     419
     420                $attachment_id = $this->factory->attachment->create_object( $test_file, 0, array(
     421                        'post_mime_type' => 'application/pdf',
     422                ) );
     423
     424                $this->assertNotEmpty( $attachment_id );
     425
     426                add_image_size( 'test-size', 100, 100 );
     427                add_filter( 'fallback_intermediate_image_sizes', array( $this, 'filter_fallback_intermediate_image_sizes' ), 10, 2 );
     428
     429                $expected = array(
     430                        'sizes' => array(
     431                                'thumbnail' => array(
     432                                        'file'      => "wordpress-gsoc-flyer-116x150.jpg",
     433                                        'width'     => 116,
     434                                        'height'    => 150,
     435                                        'mime-type' => "image/jpeg",
     436                                ),
     437                                'medium'    => array(
     438                                        'file'      => "wordpress-gsoc-flyer-232x300.jpg",
     439                                        'width'     => 232,
     440                                        'height'    => 300,
     441                                        'mime-type' => "image/jpeg",
     442                                ),
     443                                'test-size'     => array(
     444                                        'file'      => "wordpress-gsoc-flyer-77x100.jpg",
     445                                        'width'     => 77,
     446                                        'height'    => 100,
     447                                        'mime-type' => "image/jpeg",
     448                                ),
     449                                'full'      => array(
     450                                        'file'      => "wordpress-gsoc-flyer.jpg",
     451                                        'width'     => 1088,
     452                                        'height'    => 1408,
     453                                        'mime-type' => "image/jpeg",
     454                                ),
     455                        ),
     456                );
     457
     458                $metadata = wp_generate_attachment_metadata( $attachment_id, $test_file );
     459                $this->assertSame( $expected, $metadata );
     460
     461                remove_image_size( 'test-size' );
     462                remove_filter( 'fallback_intermediate_image_sizes', array( $this, 'filter_fallback_intermediate_image_sizes' ), 10 );
     463
     464                unlink( $test_file );
     465        }
     466
     467        function filter_fallback_intermediate_image_sizes( $fallback_sizes, $metadata ) {
     468                if ( false !== ( $idx = array_search( 'large', $fallback_sizes, true ) ) ) {
     469                        $fallback_sizes[ $idx ] = 'test-size';
     470                }
     471                return $fallback_sizes;
     472        }
    407473}