WordPress.org

Make WordPress Core

Ticket #21668: 21668.6.patch

File 21668.6.patch, 2.6 KB (added by markoheijnen, 7 years ago)

Different approach for Imagick

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

     
    6767                );
    6868
    6969                // Now, test for deep requirements within Imagick.
    70                 if ( ! defined( 'imagick::COMPRESSION_JPEG' ) )
     70                if ( ! defined( 'Imagick::COMPRESSION_JPEG' ) )
    7171                        return false;
    7272
    7373                if ( array_diff( $required_methods, get_class_methods( 'Imagick' ) ) )
     
    433433                        $orig_format = $this->image->getImageFormat();
    434434
    435435                        $this->image->setImageFormat( strtoupper( $this->get_extension( $mime_type ) ) );
     436
     437                        if ( method_exists( $this->image, 'getImageInterlaceScheme' ) && method_exists( $this->image, 'setImageInterlaceScheme' ) && apply_filters( 'image_save_progressive', false, $mime_type ) ) {
     438                                $orig_interlace = $this->image->getImageInterlaceScheme();
     439
     440                                if( strtoupper( $mime_type ) == 'PNG' && defined( 'Imagick::INTERLACE_PLANE' ) )
     441                                        $this->image->setImageInterlaceScheme( Imagick::INTERLACE_PLANE );
     442                                else if( defined( 'Imagick::INTERLACE_LINE' ) )
     443                                        $this->image->setImageInterlaceScheme( Imagick::INTERLACE_LINE );
     444                        }
     445
    436446                        $this->make_image( $filename, array( $image, 'writeImage' ), array( $filename ) );
    437447
    438448                        // Reset original Format
    439449                        $this->image->setImageFormat( $orig_format );
     450
     451                        if( isset( $orig_interlace ) )
     452                                $this->image->setInterlaceScheme( $orig_interlace );
    440453                }
    441454                catch ( Exception $e ) {
    442455                        return new WP_Error( 'image_save_error', $e->getMessage(), $filename );
  • wp-includes/class-wp-image-editor-gd.php

     
    348348                if ( ! $filename )
    349349                        $filename = $this->generate_filename( null, null, $extension );
    350350
     351                if ( function_exists( 'imageinterlace' ) )
     352                        imageinterlace( $image, apply_filters( 'image_save_progressive', false, $mime_type ) );
     353
    351354                if ( 'image/gif' == $mime_type ) {
    352355                        if ( ! $this->make_image( $filename, 'imagegif', array( $image, $filename ) ) )
    353356                                return new WP_Error( 'image_save_error', __('Image Editor Save Failed') );
     
    393396        public function stream( $mime_type = null ) {
    394397                list( $filename, $extension, $mime_type ) = $this->get_output_format( null, $mime_type );
    395398
     399                if ( function_exists( 'imageinterlace' ) )
     400                        imageinterlace( $image, apply_filters( 'image_save_progressive', false, $mime_type ) );
     401
    396402                switch ( $mime_type ) {
    397403                        case 'image/png':
    398404                                header( 'Content-Type: image/png' );