Make WordPress Core

Ticket #54476: 54476.6.diff

File 54476.6.diff, 2.7 KB (added by adamsilverstein, 4 years ago)
  • src/wp-includes/media.php

    diff --git src/wp-includes/media.php src/wp-includes/media.php
    index 065efde579..b12d8bd7ae 100644
    function wp_max_upload_size() {  
    38383838function wp_get_image_editor( $path, $args = array() ) {
    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'] );
    38433844
    … … function wp_get_image_editor( $path, $args = array() ) {  
    38483849                }
    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
    38533863        if ( $implementation ) {
    … … function _wp_image_editor_choose( $args = array() ) {  
    39003910         *                                'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD'.
    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 ) {
    39053916                if ( ! call_user_func( array( $implementation, 'test' ), $args ) ) {
    39063917                        continue;
    39073918                }
    39083919
     3920                // Implementation should support the passed mime type.
    39093921                if ( isset( $args['mime_type'] ) &&
    39103922                        ! call_user_func(
    39113923                                array( $implementation, 'supports_mime_type' ),
    … … function _wp_image_editor_choose( $args = array() ) {  
    39143926                        continue;
    39153927                }
    39163928
     3929                // Implementation should support requested methods.
    39173930                if ( isset( $args['methods'] ) &&
    39183931                        array_diff( $args['methods'], get_class_methods( $implementation ) ) ) {
    39193932
    39203933                        continue;
    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
    39293956/**