X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/b22765f41bf0b2021b9beb9120ee0ac91fa89292..HEAD:/wp-includes/class-wp-image-editor-imagick.php diff --git a/wp-includes/class-wp-image-editor-imagick.php b/wp-includes/class-wp-image-editor-imagick.php index 82b872d7..8f9b43cb 100644 --- a/wp-includes/class-wp-image-editor-imagick.php +++ b/wp-includes/class-wp-image-editor-imagick.php @@ -73,6 +73,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor { 'rotateimage', 'flipimage', 'flopimage', + 'readimage', ); // Now, test for deep requirements within Imagick. @@ -144,7 +145,17 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor { wp_raise_memory_limit( 'image' ); try { - $this->image = new Imagick( $this->file ); + $this->image = new Imagick(); + $file_extension = strtolower( pathinfo( $this->file, PATHINFO_EXTENSION ) ); + $filename = $this->file; + + if ( 'pdf' == $file_extension ) { + $filename = $this->pdf_setup(); + } + + // Reading image after Imagick instantiation because `setResolution` + // only applies correctly before the image is read. + $this->image->readImage( $filename ); if ( ! $this->image->valid() ) return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file); @@ -727,4 +738,27 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor { return true; } + /** + * Sets up Imagick for PDF processing. + * Increases rendering DPI and only loads first page. + * + * @since 4.7.0 + * @access protected + * + * @return string|WP_Error File to load or WP_Error on failure. + */ + protected function pdf_setup() { + try { + // By default, PDFs are rendered in a very low resolution. + // We want the thumbnail to be readable, so increase the rendering DPI. + $this->image->setResolution( 128, 128 ); + + // Only load the first page. + return $this->file . '[0]'; + } + catch ( Exception $e ) { + return new WP_Error( 'pdf_setup_failed', $e->getMessage(), $this->file ); + } + } + }