WordPress.org

Make WordPress Core

Ticket #38832: 38832.2.diff

File 38832.2.diff, 3.6 KB (added by joemcgill, 4 years ago)
  • src/wp-admin/includes/image.php

    diff --git src/wp-admin/includes/image.php src/wp-admin/includes/image.php
    index 5f7b583..8c3d533 100644
    function wp_generate_attachment_metadata( $attachment_id, $file ) { 
    234234
    235235                // Only load PDFs in an image editor if we're processing sizes.
    236236                if ( ! empty( $sizes ) ) {
    237                         $editor = wp_get_image_editor( $file );
     237                        // $editor = wp_get_image_editor( $file );
     238                        $editor_type = _wp_image_editor_choose( array( 'mime_type' => 'application/pdf' ) );
     239                        $editor = new $editor_type( $file );
     240
     241                        // Set the file to only the first page before loading.
     242                        if ( is_callable( array( $editor, 'set_pages' ) ) ) {
     243                                $editor->set_pages( '0' );
     244                        }
     245
     246                        // Set the file to only the first page before loading.
     247                        if ( is_callable( array( $editor, 'set_resolution' ) ) ) {
     248                                $editor->set_resolution( array( 128, 128 ) );
     249                        }
     250
     251                        $editor->load();
    238252
    239253                        if ( ! is_wp_error( $editor ) ) { // No support for this type of file
    240254                                $uploaded = $editor->save( $file, 'image/jpeg' );
  • src/wp-includes/class-wp-image-editor-imagick.php

    diff --git src/wp-includes/class-wp-image-editor-imagick.php src/wp-includes/class-wp-image-editor-imagick.php
    index c89706c..68eb11e 100644
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    2323         */
    2424        protected $image;
    2525
     26        /**
     27         * A range of pages supported.
     28         *
     29         * @access protected
     30         * @var string
     31         */
     32        protected $pages;
     33
     34        /**
     35         * The image resolution if set.
     36         *
     37         * @access protected
     38         * @var array
     39         */
     40        protected $resolution;
     41
    2642        public function __destruct() {
    2743                if ( $this->image instanceof Imagick ) {
    2844                        // we don't need the original in memory anymore
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    146162
    147163                try {
    148164                        $this->image = new Imagick();
    149                         $file_parts = pathinfo( $this->file );
    150                         $filename = $this->file;
    151165
    152166                        // By default, PDFs are rendered in a very low resolution.
    153167                        // We want the thumbnail to be readable, so increase the rendering dpi.
    154                         if ( 'pdf' == strtolower( $file_parts['extension'] ) ) {
    155                                 $this->image->setResolution( 128, 128 );
     168                        if ( isset( $this->resolution ) ) {
     169                                $this->image->setResolution( $this->resolution[0], $this->resolution[1] );
     170                        }
    156171
    157                                 // Only load the first page.
    158                                 $filename .= '[0]';
     172                        if ( isset( $this->pages ) ) {
     173                                $this->update_file( $this->file . '[' . $this->pages . ']' );
    159174                        }
    160175
    161176                        // Reading image after Imagick instantiation because `setResolution`
    162177                        // only applies correctly before the image is read.
    163                         $this->image->readImage( $filename );
     178                        $this->image->readImage( $this->file );
    164179
    165180                        if ( ! $this->image->valid() )
    166181                                return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file);
    class WP_Image_Editor_Imagick extends WP_Image_Editor { 
    216231                return true;
    217232        }
    218233
     234        public function set_pages( $pages ) {
     235                if ( is_scalar( $pages ) ) {
     236                        $this->pages = (string) $pages;
     237                }
     238        }
     239
     240        public function set_resolution( $resolution ) {
     241                if ( is_array( $resolution) ) {
     242                        $this->resolution = $resolution;
     243                }
     244        }
     245
     246        /**
     247         * Get the file value.
     248         *
     249         * @since 4.7.0
     250         *
     251         * @param string $file Path to the file to load.
     252         */
     253        public function get_file( $file ) {
     254                return $this->file;
     255        }
     256
     257        /**
     258         * Update the file value.
     259         *
     260         * @since 4.7.0
     261         *
     262         * @param string $file Path to the file to load.
     263         */
     264        public function update_file( $file ) {
     265                $this->file = $file;
     266        }
     267
    219268        /**
    220269         * Sets or updates current image size.
    221270         *