WordPress.org

Make WordPress Core

Ticket #21668: 21668.4.patch

File 21668.4.patch, 3.3 KB (added by pmeenan, 22 months 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 );