WordPress.org

Make WordPress Core

Ticket #21668: 21668.4.patch

File 21668.4.patch, 3.3 KB (added by pmeenan, 5 years ago)

Revised to only apply progressive encoding to JPEG images and to handle both the GD and Imagemagick paths.

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

     
    217217                switch ( $mime_type ) {
    218218                        case 'image/jpeg':
    219219                                header( 'Content-Type: image/jpeg' );
     220                                if ( function_exists('imageinterlace') )
     221                                        imageinterlace( $image, true );
    220222                                return imagejpeg( $image, null, 90 );
    221223                        case 'image/png':
    222224                                header( 'Content-Type: image/png' );
     
    259261
    260262                switch ( $mime_type ) {
    261263                        case 'image/jpeg':
     264                                if ( function_exists('imageinterlace') )
     265                                        imageinterlace( $image, true );
    262266                                return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
    263267                        case 'image/png':
    264268                                return imagepng( $image, $filename );
  • wp-includes/class-wp-image-editor-gd.php

     
    357357                                return new WP_Error( 'image_save_error', __('Image Editor Save Failed') );
    358358                }
    359359                elseif ( 'image/jpeg' == $mime_type ) {
     360                        if ( function_exists('imageinterlace') )
     361                                imageinterlace( $image, true );
    360362                        if ( ! $this->make_image( $filename, 'imagejpeg', array( $image, $filename, apply_filters( 'jpeg_quality', $this->quality, 'image_resize' ) ) ) )
    361363                                return new WP_Error( 'image_save_error', __('Image Editor Save Failed') );
    362364                }
     
    398400                                return imagegif( $this->image );
    399401                        default:
    400402                                header( 'Content-Type: image/jpeg' );
     403                                if ( function_exists('imageinterlace') )
     404                                        imageinterlace( $this->image, true );
    401405                                return imagejpeg( $this->image, null, $this->quality );
    402406                }
    403407        }
  • wp-includes/class-wp-image-editor-imagick.php

     
    5555                        'getimageblob',
    5656                        'getimagegeometry',
    5757                        'getimageformat',
     58                        'getinterlacescheme',
    5859                        'setimageformat',
    5960                        'setimagecompression',
    6061                        'setimagecompressionquality',
    6162                        'setimagepage',
     63                        'setinterlacescheme',
    6264                        'scaleimage',
    6365                        'cropimage',
    6466                        'rotateimage',
     
    6769                );
    6870
    6971                // Now, test for deep requirements within Imagick.
    70                 if ( ! defined( 'imagick::COMPRESSION_JPEG' ) )
     72                if ( ! defined( 'imagick::COMPRESSION_JPEG' ) || ! defined( 'Imagick::INTERLACE_PLANE') )
    7173                        return false;
    7274
    7375                if ( array_diff( $required_methods, get_class_methods( 'Imagick' ) ) )
     
    420422                try {
    421423                        // Store initial Format
    422424                        $orig_format = $this->image->getImageFormat();
     425                        $orig_interlace = $this->image->getImageInterlaceScheme();
    423426
    424427                        $this->image->setImageFormat( strtoupper( $this->get_extension( $mime_type ) ) );
     428                        $this->image->setInterlaceScheme( Imagick::INTERLACE_PLANE );
    425429                        $this->make_image( $filename, array( $image, 'writeImage' ), array( $filename ) );
    426430
    427431                        // Reset original Format
    428432                        $this->image->setImageFormat( $orig_format );
     433                        $this->image->setInterlaceScheme( $orig_interlace );
    429434                }
    430435                catch ( Exception $e ) {
    431436                        return new WP_Error( 'image_save_error', $e->getMessage(), $filename );