diff --git src/wp-includes/class-wp-image-editor-gd.php src/wp-includes/class-wp-image-editor-gd.php
index de079357fb..b7424f29df 100644
--- src/wp-includes/class-wp-image-editor-gd.php
+++ src/wp-includes/class-wp-image-editor-gd.php
@@ -491,6 +491,10 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
 		if ( ! $filename ) {
 			$filename = $this->generate_filename( null, null, $extension );
 		}
+		if ( function_exists( 'imageinterlace' ) ) {
+			/** This filter is documented in wp-includes/class-wp-image-editor-imagick.php */
+			imageinterlace( $image, apply_filters( 'image_save_progressive', false, $mime_type ) );
+		}
 
 		if ( 'image/gif' === $mime_type ) {
 			if ( ! $this->make_image( $filename, 'imagegif', array( $image, $filename ) ) ) {
diff --git src/wp-includes/class-wp-image-editor-imagick.php src/wp-includes/class-wp-image-editor-imagick.php
index 03fe0bca69..281b838b4c 100644
--- src/wp-includes/class-wp-image-editor-imagick.php
+++ src/wp-includes/class-wp-image-editor-imagick.php
@@ -478,10 +478,6 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 					$this->image->setImageDepth( 8 );
 				}
 			}
-
-			if ( is_callable( array( $this->image, 'setInterlaceScheme' ) ) && defined( 'Imagick::INTERLACE_NO' ) ) {
-				$this->image->setInterlaceScheme( Imagick::INTERLACE_NO );
-			}
 		} catch ( Exception $e ) {
 			return new WP_Error( 'image_resize_error', $e->getMessage() );
 		}
@@ -814,6 +810,21 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 			return new WP_Error( 'image_save_error', $e->getMessage(), $filename );
 		}
 
+		if ( method_exists( $this->image, 'setInterlaceScheme' ) && defined( 'Imagick::INTERLACE_PLANE' ) ) {
+			/**
+			 * Filters whether to use output interlaced (progressive) images.
+			 *
+			 * @since 6.5.0
+			 *
+			 * @param bool   $interlace Whether to use interlaced images. Default false.
+			 * @param string $mime_type The mime type being saved.
+			 */
+			if( apply_filters( 'image_save_progressive', false, $mime_type ) ) {
+				$this->image->setInterlaceScheme( Imagick::INTERLACE_NONE );
+			} else {
+				$this->image->setInterlaceScheme( Imagick::INTERLACE_PLANE );
+		}
+
 		$write_image_result = $this->write_image( $this->image, $filename );
 		if ( is_wp_error( $write_image_result ) ) {
 			return $write_image_result;
