WordPress.org

Make WordPress Core

Ticket #21668: 21668.5.patch

File 21668.5.patch, 2.8 KB (added by derekspringer, 9 months ago)

Restored interlacing for .gif and .png images, added 'image_save_progressive' filter.

  • wp-includes/class-wp-image-editor-gd.php

     
    344344                if ( ! $filename ) 
    345345                        $filename = $this->generate_filename( null, null, $extension ); 
    346346 
     347                if ( function_exists( 'imageinterlace' ) ) 
     348                        imageinterlace( $image, apply_filters( 'image_save_progressive', false, $mime_type ) ); 
     349 
    347350                if ( 'image/gif' == $mime_type ) { 
    348351                        if ( ! $this->make_image( $filename, 'imagegif', array( $image, $filename ) ) ) 
    349352                                return new WP_Error( 'image_save_error', __('Image Editor Save Failed') ); 
     
    389392        public function stream( $mime_type = null ) { 
    390393                list( $filename, $extension, $mime_type ) = $this->get_output_format( null, $mime_type ); 
    391394 
     395                if ( function_exists( 'imageinterlace' ) ) 
     396                        imageinterlace( $image, apply_filters( 'image_save_progressive', false, $mime_type ) ); 
     397 
    392398                switch ( $mime_type ) { 
    393399                        case 'image/png': 
    394400                                header( 'Content-Type: image/png' ); 
  • 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' ) || ! defined( 'Imagick::INTERLACE_LINE' ) ) 
    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                        if ( apply_filters( 'image_save_progressive', false, $mime_type ) ) { 
     429                                $this->image->setImageInterlaceScheme( 
     430                                        strtoupper( $mime_type ) == 'PNG' ? 
     431                                                Imagick::INTERLACE_PLANE : 
     432                                                Imagick::INTERLACE_LINE 
     433                                ); 
     434                        } 
    425435                        $this->make_image( $filename, array( $image, 'writeImage' ), array( $filename ) ); 
    426436 
    427437                        // Reset original Format 
    428438                        $this->image->setImageFormat( $orig_format ); 
     439                        $this->image->setInterlaceScheme( $orig_interlace ); 
    429440                } 
    430441                catch ( Exception $e ) { 
    431442                        return new WP_Error( 'image_save_error', $e->getMessage(), $filename );