WordPress.org

Make WordPress Core

Ticket #33642: 33642.9.patch

File 33642.9.patch, 4.0 KB (added by joemcgill, 4 years ago)
  • src/wp-includes/class-wp-image-editor-imagick.php

    diff --git src/wp-includes/class-wp-image-editor-imagick.php src/wp-includes/class-wp-image-editor-imagick.php
    index 7e6ffd1..e366b65 100644
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    6262                        'writeimage',
    6363                        'getimageblob',
    6464                        'getimagegeometry',
    65                         'getimagedepth',
    6665                        'getimageformat',
    6766                        'setimageformat',
    6867                        'setimagecompression',
    6968                        'setimagecompressionquality',
    7069                        'setimagedepth',
    7170                        'setimagepage',
    72                         'setimageproperty',
    73                         'setinterlacescheme',
    7471                        'scaleimage',
    7572                        'cropimage',
    7673                        'rotateimage',
    7774                        'flipimage',
    7875                        'flopimage',
    79                         'unsharpmaskimage',
    8076                );
    8177
    8278                // Now, test for deep requirements within Imagick.
    83                 if ( ! ( defined( 'imagick::COMPRESSION_JPEG' ) && defined( 'imagick::FILTER_TRIANGLE' ) ) )
     79                if ( ! ( defined( 'imagick::COMPRESSION_JPEG' ) ) )
    8480                        return false;
    8581
    8682                if ( array_diff( $required_methods, get_class_methods( 'Imagick' ) ) )
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    304300                if ( in_array( $filter_name, $allowed_filters ) && defined( 'Imagick::' . $filter_name ) ) {
    305301                        $filter = constant( 'Imagick::' . $filter_name );
    306302                } else {
    307                         $filter = Imagick::FILTER_TRIANGLE;
     303                        $filter = defnined( Imagick::FILTER_TRIANGLE ) ? Imagick::FILTER_TRIANGLE : false;
    308304                }
    309305
    310306                /**
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    327323                         * whenever the output size is less that 1/3 of the original image size (1/3^2 ~= .111),
    328324                         * unless we would be resampling to a scale smaller than 128x128.
    329325                         */
    330                         $resize_ratio = ( $dst_w / $this->size['width'] ) * ( $dst_h / $this->size['height'] );
    331                         $sample_factor = 5;
     326                        if ( method_exists( $this->image, 'sampleImage') ) {
     327                                $resize_ratio = ( $dst_w / $this->size['width'] ) * ( $dst_h / $this->size['height'] );
     328                                $sample_factor = 5;
    332329
    333                         if ( $resize_ratio < .111 && ( $dst_w * $sample_factor > 128 && $dst_h * $sample_factor > 128 ) ) {
    334                                 $this->image->sampleImage( $dst_w * $sample_factor, $dst_h * $sample_factor );
     330                                if ( $resize_ratio < .111 && ( $dst_w * $sample_factor > 128 && $dst_h * $sample_factor > 128 ) ) {
     331                                        $this->image->sampleImage( $dst_w * $sample_factor, $dst_h * $sample_factor );
     332                                }
    335333                        }
    336334
    337                         // Resize to the final output size.
    338                         $this->image->setOption( 'filter:support', '2.0' );
    339                         $this->image->resizeImage( $dst_w, $dst_h, $filter, 1 );
     335                        /**
     336                         * Use resizeImage() when it's availalbe and a valid filter value is set.
     337                         * Otherwise, fall back to the scaleImage() method for resizing, which
     338                         * results in better image quality over resizeImage() with default filter
     339                         * settings and retains backwards compatability with pre 4.5 functionality.
     340                         */
     341                        if ( method_exists( $this->image, 'resizeImage') && $filter ) {
     342                                $this->image->setOption( 'filter:support', '2.0' );
     343                                $this->image->resizeImage( $dst_w, $dst_h, $filter, 1 );
     344                        } else {
     345                                $this->image->scaleImage( $dst_w, $dst_h );
     346                        }
    340347
    341348                        // Set appropriate quality settings after resizing.
    342349                        if ( 'image/jpeg' == $this->mime_type ) {
    343                                 $this->image->unsharpMaskImage( 0.25, 0.25, 8, 0.065 );
     350                                if ( method_exists( $this->image, 'unsharpMaskImage') ) {
     351                                        $this->image->unsharpMaskImage( 0.25, 0.25, 8, 0.065 );
     352                                }
     353
    344354                                $this->image->setOption( 'jpeg:fancy-upsampling', 'off' );
    345355                        }
    346356
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    362372                        }
    363373
    364374                        // Limit the  bit depth of resized images to 8 bits per channel.
    365                         if ( 8 < $this->image->getImageDepth() ) {
     375                        if ( method_exists( $this->image, 'getImageDepth' ) && 8 < $this->image->getImageDepth() ) {
    366376                                $this->image->setImageDepth( 8 );
    367377                        }
    368378
    369                         $this->image->setInterlaceScheme( Imagick::INTERLACE_NO );
     379                        if ( method_exists( $this->image, 'setInterlaceScheme' ) && defined( 'Imagick::INTERLACE_NO' ) ) {
     380                                $this->image->setInterlaceScheme( Imagick::INTERLACE_NO );
     381                        }
    370382
    371383                }
    372384                catch ( Exception $e ) {