diff --git src/wp-includes/class-wp-image-editor-imagick.php src/wp-includes/class-wp-image-editor-imagick.php
index a14fa40..fb49ef7 100644
--- src/wp-includes/class-wp-image-editor-imagick.php
+++ src/wp-includes/class-wp-image-editor-imagick.php
@@ -23,6 +23,14 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 	 */
 	protected $image;
 
+	/**
+	 * Whether this is an animated image.
+	 *
+	 * @access protected
+	 * @var bool
+	 */
+	protected $animated = false;
+
 	public function __destruct() {
 		if ( $this->image instanceof Imagick ) {
 			// we don't need the original in memory anymore
@@ -63,6 +71,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 			'getimageblob',
 			'getimagegeometry',
 			'getimageformat',
+			'getimageiterations',
 			'setimageformat',
 			'setimagecompression',
 			'setimagecompressionquality',
@@ -139,11 +148,17 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 			if ( ! $this->image->valid() )
 				return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file);
 
+			// We need to check to see if image is animated before we set the index, or else it returns false.
+			// For animation to be supported, also getImageBlob, writeImages, coalesceImages and optimizeImageLayers are required.
+			// While coalesceImages seems to be supported far back, optimizeImageLayers is not.
+			$this->animated = $this->image->getImageIterations();
+
 			// Select the first frame to handle animated images properly
 			if ( is_callable( array( $this->image, 'setIteratorIndex' ) ) )
 				$this->image->setIteratorIndex(0);
 
 			$this->mime_type = $this->get_mime_type( $this->image->getImageFormat() );
+
 		}
 		catch ( Exception $e ) {
 			return new WP_Error( 'invalid_image', $e->getMessage(), $this->file );
@@ -250,11 +265,22 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 		}
 
 		try {
-			/**
-			 * @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 );
+			if ( $this->animated ) {
+				$this->image->coalesceImages();
+			}
+
+			foreach ($this->image as $frame) {
+				/**
+				 * @TODO: Thumbnail is more efficient, given a newer version of Imagemagick.
+				 * $this->image->thumbnailImage( $dst_w, $dst_h );
+				 */
+				$frame->scaleImage( $dst_w, $dst_h );
+			}
+
+			# $this->deconstructImages(); or $this->optimizeImageLayers();
+			if ( $this->animated ) {
+				$this->image->optimizeImageLayers();
+			}
 		}
 		catch ( Exception $e ) {
 			return new WP_Error( 'image_resize_error', $e->getMessage() );
@@ -356,19 +382,28 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 		}
 
 		try {
-			$this->image->cropImage( $src_w, $src_h, $src_x, $src_y );
-			$this->image->setImagePage( $src_w, $src_h, 0, 0);
+			if ( $this->animated ) {
+				$this->image->coalesceImages();
+			}
+
+			foreach ($this->image as $frame) {
+				$frame->cropImage( $src_w, $src_h, $src_x, $src_y );
+				$frame->setImagePage( $src_w, $src_h, 0, 0);
 
-			if ( $dst_w || $dst_h ) {
-				// If destination width/height isn't specified, use same as
-				// width/height from source.
-				if ( ! $dst_w )
+				if ( $dst_w || $dst_h ) {
+					// If destination width/height isn't specified, use same as
+					// width/height from source.
+					if ( ! $dst_w )
 					$dst_w = $src_w;
-				if ( ! $dst_h )
-					$dst_h = $src_h;
+					if ( ! $dst_h )
+						$dst_h = $src_h;
 
-				$this->image->scaleImage( $dst_w, $dst_h );
-				return $this->update_size();
+					$frame->scaleImage( $dst_w, $dst_h );
+				}
+			}
+
+			if ( $this->animated ) {
+				$this->image->optimizeImageLayers();
 			}
 		}
 		catch ( Exception $e ) {
@@ -392,7 +427,17 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 		 * (GD rotates counter-clockwise)
 		 */
 		try {
-			$this->image->rotateImage( new ImagickPixel('none'), 360-$angle );
+			if ( $this->animated ) {
+				$this->image->coalesceImages();
+			}
+
+			foreach ($this->image as $frame) {
+				$frame->rotateImage( new ImagickPixel('none'), 360-$angle );
+			}
+
+			if ( $this->animated ) {
+				$this->image->optimizeImageLayers();
+			}
 
 			// Since this changes the dimensions of the image, update the size.
 			$result = $this->update_size();
@@ -419,11 +464,21 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 	 */
 	public function flip( $horz, $vert ) {
 		try {
-			if ( $horz )
-				$this->image->flipImage();
+			if ( $this->animated ) {
+				$this->image->coalesceImages();
+			}
+
+			foreach ($this->image as $frame) {
+				if ( $horz )
+					$frame->flipImage();
 
-			if ( $vert )
-				$this->image->flopImage();
+				if ( $vert )
+					$frame->flopImage();
+			}
+
+			if ( $this->animated ) {
+				$this->image->optimizeImageLayers();
+			}
 		}
 		catch ( Exception $e ) {
 			return new WP_Error( 'image_flip_error', $e->getMessage() );
@@ -477,7 +532,12 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 			$orig_format = $this->image->getImageFormat();
 
 			$this->image->setImageFormat( strtoupper( $this->get_extension( $mime_type ) ) );
-			$this->make_image( $filename, array( $image, 'writeImage' ), array( $filename ) );
+
+			if ( $this->animated ) {
+				$this->make_image( $filename, array( $image, 'writeImages' ), array( $filename, true ) );
+			} else {
+				$this->make_image( $filename, array( $image, 'writeImage' ), array( $filename ) );
+			}
 
 			// Reset original Format
 			$this->image->setImageFormat( $orig_format );
@@ -519,7 +579,12 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
 
 			// Output stream of image content
 			header( "Content-Type: $mime_type" );
-			print $this->image->getImageBlob();
+
+			if ( $this->animated ) {
+				print $this->image->getImagesBlob();
+			} else {
+				print $this->image->getImageBlob();
+			}
 
 			// Reset Image to original Format
 			$this->image->setImageFormat( $this->get_extension( $this->mime_type ) );
