Index: wp-includes/class-wp-image-editor-imagick.php
===================================================================
--- wp-includes/class-wp-image-editor-imagick.php	(revision 26012)
+++ wp-includes/class-wp-image-editor-imagick.php	(working copy)
@@ -67,7 +67,7 @@
 		);
 
 		// Now, test for deep requirements within Imagick.
-		if ( ! defined( 'imagick::COMPRESSION_JPEG' ) )
+		if ( ! defined( 'Imagick::COMPRESSION_JPEG' ) )
 			return false;
 
 		if ( array_diff( $required_methods, get_class_methods( 'Imagick' ) ) )
@@ -433,10 +433,23 @@
 			$orig_format = $this->image->getImageFormat();
 
 			$this->image->setImageFormat( strtoupper( $this->get_extension( $mime_type ) ) );
+
+			if ( method_exists( $this->image, 'getImageInterlaceScheme' ) && method_exists( $this->image, 'setImageInterlaceScheme' ) && apply_filters( 'image_save_progressive', false, $mime_type ) ) {
+				$orig_interlace = $this->image->getImageInterlaceScheme();
+
+				if( strtoupper( $mime_type ) == 'PNG' && defined( 'Imagick::INTERLACE_PLANE' ) )
+					$this->image->setImageInterlaceScheme( Imagick::INTERLACE_PLANE );
+				else if( defined( 'Imagick::INTERLACE_LINE' ) )
+					$this->image->setImageInterlaceScheme( Imagick::INTERLACE_LINE );
+			}
+
 			$this->make_image( $filename, array( $image, 'writeImage' ), array( $filename ) );
 
 			// Reset original Format
 			$this->image->setImageFormat( $orig_format );
+
+			if( isset( $orig_interlace ) )
+				$this->image->setInterlaceScheme( $orig_interlace );
 		}
 		catch ( Exception $e ) {
 			return new WP_Error( 'image_save_error', $e->getMessage(), $filename );
Index: wp-includes/class-wp-image-editor-gd.php
===================================================================
--- wp-includes/class-wp-image-editor-gd.php	(revision 26012)
+++ wp-includes/class-wp-image-editor-gd.php	(working copy)
@@ -348,6 +348,9 @@
 		if ( ! $filename )
 			$filename = $this->generate_filename( null, null, $extension );
 
+		if ( function_exists( 'imageinterlace' ) )
+			imageinterlace( $image, apply_filters( 'image_save_progressive', false, $mime_type ) );
+
 		if ( 'image/gif' == $mime_type ) {
 			if ( ! $this->make_image( $filename, 'imagegif', array( $image, $filename ) ) )
 				return new WP_Error( 'image_save_error', __('Image Editor Save Failed') );
@@ -393,6 +396,9 @@
 	public function stream( $mime_type = null ) {
 		list( $filename, $extension, $mime_type ) = $this->get_output_format( null, $mime_type );
 
+		if ( function_exists( 'imageinterlace' ) )
+			imageinterlace( $image, apply_filters( 'image_save_progressive', false, $mime_type ) );
+
 		switch ( $mime_type ) {
 			case 'image/png':
 				header( 'Content-Type: image/png' );
