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 | |