diff --git src/wp-includes/media.php src/wp-includes/media.php
index 065efde579..f068469e52 100644
|
|
function wp_max_upload_size() { |
3838 | 3838 | function wp_get_image_editor( $path, $args = array() ) { |
3839 | 3839 | $args['path'] = $path; |
3840 | 3840 | |
| 3841 | // If the mime type is not set in args, try to extract and set it from the file. |
3841 | 3842 | if ( ! isset( $args['mime_type'] ) ) { |
3842 | 3843 | $file_info = wp_check_filetype( $args['path'] ); |
3843 | 3844 | |
… |
… |
function wp_get_image_editor( $path, $args = array() ) { |
3848 | 3849 | } |
3849 | 3850 | } |
3850 | 3851 | |
| 3852 | $mime_type = isset( $args['mime_type'] ) ? $args['mime_type'] : ''; |
| 3853 | |
| 3854 | /** This filter is documented in wp-includes/class-wp-image-editor.php */ |
| 3855 | $output_format = apply_filters( 'image_editor_output_format', array(), $path, $mime_type ); |
| 3856 | if ( '' !== $mime_type && isset( $output_format[ $mime_type ] ) ) { |
| 3857 | $args['output_mime_type'] = $output_format[ $mime_type ]; |
| 3858 | } |
| 3859 | |
3851 | 3860 | $implementation = _wp_image_editor_choose( $args ); |
3852 | 3861 | |
3853 | 3862 | if ( $implementation ) { |
… |
… |
function _wp_image_editor_choose( $args = array() ) { |
3900 | 3909 | * 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD'. |
3901 | 3910 | */ |
3902 | 3911 | $implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' ) ); |
| 3912 | $supports_input = false; |
3903 | 3913 | |
3904 | 3914 | foreach ( $implementations as $implementation ) { |
3905 | 3915 | if ( ! call_user_func( array( $implementation, 'test' ), $args ) ) { |
3906 | 3916 | continue; |
3907 | 3917 | } |
3908 | 3918 | |
| 3919 | // Implementation should support the passed mime type. |
3909 | 3920 | if ( isset( $args['mime_type'] ) && |
3910 | 3921 | ! call_user_func( |
3911 | 3922 | array( $implementation, 'supports_mime_type' ), |
… |
… |
function _wp_image_editor_choose( $args = array() ) { |
3914 | 3925 | continue; |
3915 | 3926 | } |
3916 | 3927 | |
| 3928 | // Implementation should support requested methods. |
3917 | 3929 | if ( isset( $args['methods'] ) && |
3918 | 3930 | array_diff( $args['methods'], get_class_methods( $implementation ) ) ) { |
3919 | 3931 | |
3920 | 3932 | continue; |
3921 | 3933 | } |
3922 | 3934 | |
| 3935 | // Implementation should ideally support the output mime type as well if set and different than the passed type. |
| 3936 | if ( |
| 3937 | isset( $args['mime_type'] ) && |
| 3938 | isset( $args['output_mime_type'] ) && |
| 3939 | $args['mime_type'] !== $args['output_mime_type'] && |
| 3940 | ! call_user_func( array( $implementation, 'supports_mime_type' ), $args['output_mime_type'] ) |
| 3941 | ) { |
| 3942 | // This implementation supports the imput type but not the output type. |
| 3943 | // Keep looking to see if we can find an implementation that supports both. |
| 3944 | $supports_input = $implementation; |
| 3945 | continue; |
| 3946 | } |
| 3947 | |
| 3948 | // Favor the implementation that supports both input and output mime types. |
3923 | 3949 | return $implementation; |
3924 | 3950 | } |
3925 | 3951 | |
3926 | | return false; |
| 3952 | return $supports_input; |
3927 | 3953 | } |
3928 | 3954 | |
3929 | 3955 | /** |
diff --git tests/phpunit/tests/image/editor.php tests/phpunit/tests/image/editor.php
index 487dad0664..95981bad82 100644
|
|
class Tests_Image_Editor extends WP_Image_UnitTestCase { |
126 | 126 | $this->assertSame( 82, $editor->get_quality(), 'Default quality setting is 82.' ); |
127 | 127 | |
128 | 128 | // Quality should change to the output format's value. |
129 | | // A PNG image will be converted to WEBP whose quialty should be 86. |
| 129 | // A PNG image will be converted to WEBP whose quality should be 86. |
130 | 130 | $editor->save(); |
131 | 131 | $this->assertSame( 86, $editor->get_quality(), 'Output image format is WEBP. Quality setting for it should be 86.' ); |
132 | 132 | |