Make WordPress Core

Changeset 54416


Ignore:
Timestamp:
10/07/2022 07:01:32 PM (2 years ago)
Author:
adamsilverstein
Message:

Media: improve image engine detection when using the output format filter.

When the output format is altered with the image_editor_output_format filter, prefer the image engine that supports both input an output types, falling back to the engine that supports the input type.

Correct an issue where the output format filter wasn't respected because the selected engine didn't support the output format.

Props mikeschroder, ironprogrammer.
Fixes #54476.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/media.php

    r54319 r54416  
    38393839    $args['path'] = $path;
    38403840
     3841    // If the mime type is not set in args, try to extract and set it from the file.
    38413842    if ( ! isset( $args['mime_type'] ) ) {
    38423843        $file_info = wp_check_filetype( $args['path'] );
     
    38493850    }
    38503851
     3852    // Check and set the output mime type mapped to the input type.
     3853    if ( isset( $args['mime_type'] ) ) {
     3854        /** This filter is documented in wp-includes/class-wp-image-editor.php */
     3855        $output_format = apply_filters( 'image_editor_output_format', array(), $path, $args['mime_type'] );
     3856        if ( isset( $output_format[ $args['mime_type'] ] ) ) {
     3857            $args['output_mime_type'] = $output_format[ $args['mime_type'] ];
     3858        }
     3859    }
     3860
    38513861    $implementation = _wp_image_editor_choose( $args );
    38523862
     
    39013911     */
    39023912    $implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) );
     3913    $supports_input  = false;
    39033914
    39043915    foreach ( $implementations as $implementation ) {
     
    39073918        }
    39083919
     3920        // Implementation should support the passed mime type.
    39093921        if ( isset( $args['mime_type'] ) &&
    39103922            ! call_user_func(
     
    39153927        }
    39163928
     3929        // Implementation should support requested methods.
    39173930        if ( isset( $args['methods'] ) &&
    39183931            array_diff( $args['methods'], get_class_methods( $implementation ) ) ) {
     
    39213934        }
    39223935
     3936        // Implementation should ideally support the output mime type as well if set and different than the passed type.
     3937        if (
     3938            isset( $args['mime_type'] ) &&
     3939            isset( $args['output_mime_type'] ) &&
     3940            $args['mime_type'] !== $args['output_mime_type'] &&
     3941            ! call_user_func( array( $implementation, 'supports_mime_type' ), $args['output_mime_type'] )
     3942        ) {
     3943            // This implementation supports the imput type but not the output type.
     3944            // Keep looking to see if we can find an implementation that supports both.
     3945            $supports_input = $implementation;
     3946            continue;
     3947        }
     3948
     3949        // Favor the implementation that supports both input and output mime types.
    39233950        return $implementation;
    39243951    }
    39253952
    3926     return false;
     3953    return $supports_input;
    39273954}
    39283955
Note: See TracChangeset for help on using the changeset viewer.