WordPress.org

Make WordPress Core

Ticket #21668: 21668.5.patch

File 21668.5.patch, 2.8 KB (added by derekspringer, 7 years 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 );