diff --git src/wp-includes/class-wp-image-editor-imagick.php src/wp-includes/class-wp-image-editor-imagick.php
index a14fa40..b026327 100644
--- src/wp-includes/class-wp-image-editor-imagick.php
+++ src/wp-includes/class-wp-image-editor-imagick.php
@@ -254,7 +254,15 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 			 * @TODO: Thumbnail is more efficient, given a newer version of Imagemagick.
 			 * $this->image->thumbnailImage( $dst_w, $dst_h );
 			 */
-			$this->image->scaleImage( $dst_w, $dst_h );
+			$this->image->setOption( 'filter:support', '2.0' );
+			$this->thumbnailImage( $max_w, $max_h, false, false, Imagick::FILTER_TRIANGLE );
+
+			// Set quality filters.
+			$this->image->unsharpMaskImage( 0.25, 0.25, 8, 0.065 );
+			$this->image->setOption( 'jpeg:fancy-upsampling', 'off' );
+
+			// Strip profiles.
+			$this->strip_profiles();
 		}
 		catch ( Exception $e ) {
 			return new WP_Error( 'image_resize_error', $e->getMessage() );
@@ -530,4 +538,166 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 
 		return true;
 	}
+
+	/**
+	 * Changes the size of an image to the given dimensions.
+	 *
+	 * `thumbnailImage` changes the size of an image to the given dimensions and
+	 * removes any associated profiles. The goal is to produce small low cost
+	 * thumbnail images suited for display on the Web.
+	 *
+	 * With the original Imagick thumbnailImage implementation, there is no way to choose a
+	 * resampling filter. This class recreates Imagick’s C implementation and adds this
+	 * additional feature.
+	 *
+	 * @access	public
+	 *
+	 * @param integer $columns The number of columns in the output image. 0 = maintain aspect ratio based on $rows.
+	 * @param integer $rows    The number of rows in the output image. 0 = maintain aspect ratio based on $columns.
+	 * @param bool    $bestfit Treat $columns and $rows as a bounding box in which to fit the image.
+	 * @param bool    $fill    Fill in the bounding box with the background colour.
+	 * @param integer $filter  The resampling filter to use. Refer to the list of filter constants at <http://php.net/manual/en/imagick.constants.php>.
+	 *
+	 * @return bool Indicates whether the operation was performed successfully.
+	 */
+	public function thumbnailImage( $columns, $rows, $bestfit = false, $fill = false, $filter = Imagick::FILTER_TRIANGLE ) {
+		/*
+		 * Sample factor; defined in original ImageMagick thumbnailImage function
+		 * the scale to which the image should be resized using the 'sample' function.
+		 */
+		$SampleFactor = 5;
+		// Filter whitelist.
+		$filters = array(
+			Imagick::FILTER_POINT,
+			Imagick::FILTER_BOX,
+			Imagick::FILTER_TRIANGLE,
+			Imagick::FILTER_HERMITE,
+			Imagick::FILTER_HANNING,
+			Imagick::FILTER_HAMMING,
+			Imagick::FILTER_BLACKMAN,
+			Imagick::FILTER_GAUSSIAN,
+			Imagick::FILTER_QUADRATIC,
+			Imagick::FILTER_CUBIC,
+			Imagick::FILTER_CATROM,
+			Imagick::FILTER_MITCHELL,
+			Imagick::FILTER_LANCZOS,
+			Imagick::FILTER_BESSEL,
+			Imagick::FILTER_SINC
+		);
+		// Parse parameters given to function.
+		$columns = (double) $columns;
+		$rows = (double) $rows;
+		$bestfit = (bool) $bestfit;
+		$fill = (bool) $fill;
+		// We can’t resize to (0,0).
+		if ( $rows < 1 && $columns < 1 ) {
+			return false;
+		}
+		// Set a default filter if an acceptable one wasn’t passed.
+		if ( ! in_array( $filter, $filters ) ) {
+			$filter = Imagick::FILTER_TRIANGLE;
+		}
+		// Figure out the output width and height.
+		$width = (double) $this->image->getImageWidth();
+		$height = (double) $this->image->getImageHeight();
+		$new_width = $columns;
+		$new_height = $rows;
+		$x_factor = $columns / $width;
+		$y_factor = $rows / $height;
+		if ( $rows < 1 ) {
+			$new_height = round( $x_factor * $height );
+		} elseif ( $columns < 1 ) {
+			$new_width = round( $y_factor * $width );
+		}
+		/*
+		 * If bestfit is true, the new_width/new_height of the image will be different than
+		 * the columns/rows parameters; those will define a bounding box in which the image will be fit.
+		 */
+		if ( $bestfit && $x_factor > $y_factor ) {
+			$x_factor = $y_factor;
+			$new_width = round( $y_factor * $width );
+		} elseif ( $bestfit && $y_factor > $x_factor ) {
+			$y_factor = $x_factor;
+			$new_height = round( $x_factor * $height );
+		}
+		if ( $new_width < 1 ) {
+			$new_width = 1;
+		}
+		if ( $new_height < 1 ) {
+			$new_height = 1;
+		}
+		/*
+		 * If we’re resizing the image to more than about 1/3 it’s original size
+		 * then just use the resize function.
+		 */
+		if ( ( $x_factor * $y_factor ) > 0.1 ) {
+			$this->image->resizeImage( $new_width, $new_height, $filter, 1 );
+		// if we’d be using sample to scale to smaller than 128x128, just use resize
+		} elseif ( ( ( $SampleFactor * $new_width ) < 128) || ( ( $SampleFactor * $new_height ) < 128 ) ) {
+				$this->image->resizeImage( $new_width, $new_height, $filter, 1 );
+		// otherwise, use sample first, then resize
+		} else {
+			$this->image->sampleImage( $SampleFactor * $new_width, $SampleFactor * $new_height );
+			$this->image->resizeImage( $new_width, $new_height, $filter, 1 );
+		}
+		// if the alpha channel is not defined, make it opaque
+		if ( $this->image->getImageAlphaChannel() == Imagick::ALPHACHANNEL_UNDEFINED ) {
+			$this->image->setImageAlphaChannel( Imagick::ALPHACHANNEL_OPAQUE );
+		}
+		// set the image’s bit depth to 8 bits
+		$this->image->setImageDepth( 8 );
+		// turn off interlacing
+		$this->image->setInterlaceScheme( Imagick::INTERLACE_NO );
+		/*
+		 * In case user wants to fill use extent for it rather than creating a new canvas
+		 * fill out the bounding box.
+		 */
+		if ( $bestfit && $fill && ( $new_width != $columns || $new_height != $rows ) ) {
+			$extent_x = 0;
+			$extent_y = 0;
+			if ( $columns > $new_width ) {
+				$extent_x = ( $columns - $new_width ) / 2;
+			}
+			if ( $rows > $new_height ) {
+				$extent_y = ( $rows - $new_height ) / 2;
+			}
+			$this->image->extentImage( $columns, $rows, 0 - $extent_x, $extent_y );
+		}
+		return true;
+	}
+
+
+	/**
+	 * Strip all profiles except color profiles from an image.
+	 *
+	 * @access public
+	 */
+	public function strip_profiles() {
+		foreach ( $this->image->getImageProfiles( '*', true ) as $key => $value ) {
+			if ( $key != 'icc' && $key != 'icm' ) {
+				$this->image->removeImageProfile( $key );
+			}
+		}
+		if ( method_exists( $this, 'deleteImageProperty' ) ) {
+			$this->image->deleteImageProperty( 'comment' );
+			$this->image->deleteImageProperty( 'Thumb::URI' );
+			$this->image->deleteImageProperty( 'Thumb::MTime' );
+			$this->image->deleteImageProperty( 'Thumb::Size' );
+			$this->image->deleteImageProperty( 'Thumb::Mimetype' );
+			$this->image->deleteImageProperty( 'software' );
+			$this->image->deleteImageProperty( 'Thumb::Image::Width' );
+			$this->image->deleteImageProperty( 'Thumb::Image::Height' );
+			$this->image->deleteImageProperty( 'Thumb::Document::Pages' );
+		} else {
+			$this->image->setImageProperty( 'comment', '' );
+			$this->image->setImageProperty( 'Thumb::URI', '' );
+			$this->image->setImageProperty( 'Thumb::MTime', '' );
+			$this->image->setImageProperty( 'Thumb::Size', '' );
+			$this->image->setImageProperty( 'Thumb::Mimetype', '' );
+			$this->image->setImageProperty( 'software', '' );
+			$this->image->setImageProperty( 'Thumb::Image::Width', '' );
+			$this->image->setImageProperty( 'Thumb::Image::Height', '' );
+			$this->image->setImageProperty( 'Thumb::Document::Pages', '' );
+		}
+	}
 }
diff --git src/wp-includes/class-wp-image-editor.php src/wp-includes/class-wp-image-editor.php
index adaa884..bb29617 100644
--- src/wp-includes/class-wp-image-editor.php
+++ src/wp-includes/class-wp-image-editor.php
@@ -17,7 +17,7 @@ abstract class WP_Image_Editor {
 	protected $mime_type = null;
 	protected $default_mime_type = 'image/jpeg';
 	protected $quality = false;
-	protected $default_quality = 90;
+	protected $default_quality = 82;
 
 	/**
 	 * Each instance handles a single file.
@@ -492,4 +492,3 @@ abstract class WP_Image_Editor {
 		return $extensions[0];
 	}
 }
-
