diff --git src/wp-includes/class-wp-image-editor.php src/wp-includes/class-wp-image-editor.php
index 7dcdc91d5a..d322d6a7cb 100644
--- src/wp-includes/class-wp-image-editor.php
+++ src/wp-includes/class-wp-image-editor.php
@@ -316,6 +316,37 @@ abstract class WP_Image_Editor {
 			$new_ext   = $file_ext;
 		}
 
+		/**
+		 * Filters the image editor output format mapping.
+		 *
+		 * Enables filtering the mime type used to save images. By default,
+		 * the mapping array is empty, so the mime type matches the source image.
+		 *
+		 * @see src/wp-includes/class-wp-image-editor.php -> get_output_format()
+		 *
+		 * @since 5.8.0
+		 *
+		 * @param array $wp_image_editor_output_format {
+		 *     An array of mime type mappings. Maps a source mime type to a new
+		 *     destination mime type. Empty by default.
+		 *
+		 *     @type array $mime_type The source mime type {
+		 *         @type string $mime_type The new mime type.
+		 *     }
+		 * @param string $filename Path to the image.
+		 * @param string $mime_type The source image mime type.
+		 * }
+		 */
+		$wp_image_editor_output_format = apply_filters( 'image_editor_output_format', array(), $filename, $mime_type );
+
+		if (
+			isset( $wp_image_editor_output_format[ $mime_type ] ) &&
+			$this->supports_mime_type( $wp_image_editor_output_format[ $mime_type ] )
+		) {
+			$mime_type = $wp_image_editor_output_format[ $mime_type ];
+			$new_ext = $this->get_extension( $mime_type );
+		}
+
 		// Double-check that the mime-type selected is supported by the editor.
 		// If not, choose a default instead.
 		if ( ! $this->supports_mime_type( $mime_type ) ) {
diff --git tests/phpunit/tests/image/intermediateSize.php tests/phpunit/tests/image/intermediateSize.php
index b92c833a9d..22baf3143d 100644
--- tests/phpunit/tests/image/intermediateSize.php
+++ tests/phpunit/tests/image/intermediateSize.php
@@ -62,6 +62,24 @@ class Tests_Image_Intermediate_Size extends WP_UnitTestCase {
 		unlink( DIR_TESTDATA . '/images/a2-small-100x75.jpg' );
 	}
 
+	/**
+	 * @requires function imagejpeg
+	 * @ticket 52867
+	 */
+	function test_image_editor_output_format_filter() {
+		add_filter( 'image_editor_output_format', function() { return array( "image/jpeg" => "image/webp" ); } );
+		$file = DIR_TESTDATA . '/images/waffles.jpg';
+		$image = image_make_intermediate_size( $file, 100, 75, true );
+		$editor = wp_get_image_editor( $file );
+		if ( is_wp_error( $editor ) || ! $editor->supports_mime_type( 'image/webp' ) ) {
+			$this->assertSame( 'image/jpeg', $image['mime-type'] );
+		} else {
+			$this->assertSame( 'image/webp', $image['mime-type'] );
+		}
+		unlink( DIR_TESTDATA . '/images/' . $image['file'] );
+		remove_all_filters( 'image_editor_output_format' );
+	}
+
 	/**
 	 * @ticket 17626
 	 * @requires function imagejpeg
