WordPress.org

Make WordPress Core

Ticket #31050: 31050.9.patch

File 31050.9.patch, 10.7 KB (added by markoheijnen, 4 years ago)

Increase the quality of the PDF and fix scaling PDF image issue

  • src/wp-admin/includes/image.php

     
    7878
    7979        $metadata = array();
    8080        $support = false;
    81         if ( preg_match('!^image/!', get_post_mime_type( $attachment )) && file_is_displayable_image($file) ) {
     81        $mime_type = get_post_mime_type( $attachment );
     82
     83        /**
     84         * Filter attachment mime-types that support thumbnail fallback.
     85         *
     86         * @since 4.5.0
     87         *
     88         * @param array $mime_types An array of mime-types.
     89         */
     90        $attachment_fallback_mimetypes = apply_filters( 'attachment_fallback_mimetypes', array( 'application/pdf' ) );
     91
     92        if ( preg_match( '!^image/!', $mime_type ) && file_is_displayable_image($file) ) {
    8293                $imagesize = getimagesize( $file );
    8394                $metadata['width'] = $imagesize[0];
    8495                $metadata['height'] = $imagesize[1];
     
    192203                        }
    193204                }
    194205        }
     206        // Check to see if we support a fallback thumbnail for this mime-type.
     207        else if ( in_array( $mime_type, $attachment_fallback_mimetypes ) ) {
     208                $editor = wp_get_image_editor( $file );
     209                $sizes = array(
     210                        'thumbnail' => array(
     211                                'width'  => get_option( "thumbnail_size_w" ),
     212                                'height' => get_option( "thumbnail_size_h" ),
     213                                'crop'   => get_option( "thumbnail_crop" )
     214                        )
     215                );
    195216
     217                if ( ! is_wp_error( $editor ) ) { // No support for this type of file
     218                        $uploaded = $editor->save( $file . '.jpg' );
     219                        unset( $uploaded['path'] );
     220
     221                        if ( ! is_wp_error( $uploaded ) ) {
     222                                $metadata['sizes'] = $editor->multi_resize( $sizes );
     223                                $metadata['sizes']['full'] = $uploaded;
     224                        }
     225                }
     226        }
     227
    196228        // Remove the blob of binary data from the array.
    197229        if ( $metadata ) {
    198230                unset( $metadata['image']['data'] );
  • src/wp-admin/includes/media.php

     
    27532753
    27542754                echo wp_video_shortcode( $attr );
    27552755
     2756        else :
     2757                $image = wp_get_attachment_image( $attachment_id, 'full', false, array( 'style' => 'max-width:100%' ) );
     2758
     2759                if ( $image ) {
     2760                        ?>
     2761
     2762                        <div class="wp_attachment_image wp-clearfix" id="media-head-<?php echo $attachment_id; ?>">
     2763                                <p id="thumbnail-head-<?php echo $attachment_id; ?>">
     2764                                        <img class="thumbnail" src="<?php echo set_url_scheme( $thumb_url[0] ); ?>" style="max-width:100%" alt="" />
     2765                                </p>
     2766                        </div>
     2767
     2768                        <?php
     2769                }
     2770
    27562771        endif; ?>
    27572772        </div>
    27582773        <div class="wp_attachment_details edit-form-section">
  • src/wp-includes/class-wp-image-editor-imagick.php

     
    134134                @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) );
    135135
    136136                try {
    137                         $this->image = new Imagick( $this->file );
     137                        $this->image = new Imagick();
    138138
     139                        $file_parts = pathinfo($this->file);
     140                        if ( 'pdf' == $file_parts['extension'] ) {
     141                                $this->image->setResolution(200,200);
     142                        }
     143
     144                        $this->image->readimage($this->file);
     145
    139146                        if ( ! $this->image->valid() )
    140147                                return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file);
    141148
  • src/wp-includes/media-template.php

     
    290290                        <div class="thumbnail thumbnail-{{ data.type }}">
    291291                                <# if ( data.uploading ) { #>
    292292                                        <div class="media-progress-bar"><div></div></div>
    293                                 <# } else if ( 'image' === data.type && data.sizes && data.sizes.large ) { #>
     293                                <# } else if ( data.sizes && data.sizes.large ) { #>
    294294                                        <img class="details-image" src="{{ data.sizes.large.url }}" draggable="false" alt="" />
    295                                 <# } else if ( 'image' === data.type && data.sizes && data.sizes.full ) { #>
     295                                <# } else if ( data.sizes && data.sizes.full ) { #>
    296296                                        <img class="details-image" src="{{ data.sizes.full.url }}" draggable="false" alt="" />
    297297                                <# } else if ( -1 === jQuery.inArray( data.type, [ 'audio', 'video' ] ) ) { #>
    298298                                        <img class="details-image icon" src="{{ data.icon }}" draggable="false" alt="" />
     
    454454                                        <div class="centered">
    455455                                                <# if ( data.image && data.image.src && data.image.src !== data.icon ) { #>
    456456                                                        <img src="{{ data.image.src }}" class="thumbnail" draggable="false" alt="" />
     457                                                <# } else if ( data.sizes && data.sizes.full ) { #>
     458                                                        <img src="{{ data.sizes.full.url }}" class="thumbnail" draggable="false" alt="" />
    457459                                                <# } else { #>
    458460                                                        <img src="{{ data.icon }}" class="icon" draggable="false" alt="" />
    459461                                                <# } #>
  • src/wp-includes/media.php

     
    163163 *                     the image is an intermediate size. False on failure.
    164164 */
    165165function image_downsize( $id, $size = 'medium' ) {
     166        $is_image = wp_attachment_is_image( $id );
    166167
    167         if ( !wp_attachment_is_image($id) )
    168                 return false;
    169 
    170         /**
    171          * Filter whether to preempt the output of image_downsize().
    172          *
    173          * Passing a truthy value to the filter will effectively short-circuit
    174          * down-sizing the image, returning that value as output instead.
    175          *
    176          * @since 2.5.0
    177          *
    178          * @param bool         $downsize Whether to short-circuit the image downsize. Default false.
    179          * @param int          $id       Attachment ID for image.
    180          * @param array|string $size     Size of image. Image size or array of width and height values (in that order).
    181          *                               Default 'medium'.
    182          */
    183         if ( $out = apply_filters( 'image_downsize', false, $id, $size ) ) {
    184                 return $out;
     168        if ( $is_image ) {
     169                /**
     170                 * Filter whether to preempt the output of image_downsize().
     171                 *
     172                 * Passing a truthy value to the filter will effectively short-circuit
     173                 * down-sizing the image, returning that value as output instead.
     174                 *
     175                 * @since 2.5.0
     176                 *
     177                 * @param bool         $downsize Whether to short-circuit the image downsize. Default false.
     178                 * @param int          $id       Attachment ID for image.
     179                 * @param array|string $size     Size of image. Image size or array of width and height values (in that order).
     180                 *                               Default 'medium'.
     181                 */
     182                if ( $out = apply_filters( 'image_downsize', false, $id, $size ) ) {
     183                        return $out;
     184                }
    185185        }
    186186
     187        $meta = wp_get_attachment_metadata($id);
     188
    187189        $img_url = wp_get_attachment_url($id);
    188         $meta = wp_get_attachment_metadata($id);
    189190        $width = $height = 0;
    190191        $is_intermediate = false;
    191192        $img_url_basename = wp_basename($img_url);
    192193
     194        if ( ! $is_image && ! empty( $meta['sizes'] ) ) {
     195                $img_url = str_replace( $img_url_basename, $meta['sizes']['full']['file'], $img_url );
     196                $img_url_basename = $meta['sizes']['full']['file'];
     197                $width = $meta['sizes']['full']['width'];
     198                $height = $meta['sizes']['full']['height'];
     199        }
     200
    193201        // try for a new style intermediate size
    194202        if ( $intermediate = image_get_intermediate_size($id, $size) ) {
    195203                $img_url = str_replace($img_url_basename, $intermediate['file'], $img_url);
     
    206214                        $is_intermediate = true;
    207215                }
    208216        }
     217
    209218        if ( !$width && !$height && isset( $meta['width'], $meta['height'] ) ) {
    210219                // any other type: use the real image
    211220                $width = $meta['width'];
     
    637646        if ( is_array($size) && !empty($imagedata['sizes']) ) {
    638647                $candidates = array();
    639648
     649                if ( ! isset( $imagedata['file'] ) && isset( $imagedata['sizes']['full'] ) ) {
     650                        $imagedata['height'] = $imagedata['sizes']['full']['height'];
     651                        $imagedata['width']  = $imagedata['sizes']['full']['width'];
     652                }
     653
    640654                foreach ( $imagedata['sizes'] as $_size => $data ) {
    641655                        // If there's an exact match to an existing image size, short circuit.
    642656                        if ( $data['width'] == $size[0] && $data['height'] == $size[1] ) {
     
    682696
    683697        $data = $imagedata['sizes'][$size];
    684698        // include the full filesystem path of the intermediate file
    685         if ( empty($data['path']) && !empty($data['file']) ) {
     699        if ( empty($data['path']) && ! empty($data['file']) && ! empty($imagedata['file'] ) ) {
    686700                $file_url = wp_get_attachment_url($post_id);
    687701                $data['path'] = path_join( dirname($imagedata['file']), $data['file'] );
    688702                $data['url'] = path_join( dirname($file_url), $data['file'] );
     
    751765function wp_get_attachment_image_src( $attachment_id, $size = 'thumbnail', $icon = false ) {
    752766        // get a thumbnail or intermediate image if there is one
    753767        $image = image_downsize( $attachment_id, $size );
     768
    754769        if ( ! $image ) {
    755770                $src = false;
    756771
     
    9851000         */
    9861001        $image_meta = apply_filters( 'wp_calculate_image_srcset_meta', $image_meta, $size_array, $image_src, $attachment_id );
    9871002
    988         if ( empty( $image_meta['sizes'] ) ) {
     1003        if ( empty( $image_meta['file'] ) || empty( $image_meta['sizes'] ) ) {
    9891004                return false;
    9901005        }
    9911006
     
    30693084        if ( current_user_can( 'delete_post', $attachment->ID ) )
    30703085                $response['nonces']['delete'] = wp_create_nonce( 'delete-post_' . $attachment->ID );
    30713086
    3072         if ( $meta && 'image' === $type ) {
     3087        if ( $meta && ! empty($meta['sizes']) ) {
    30733088                $sizes = array();
    30743089
    30753090                /** This filter is documented in wp-admin/includes/media.php */
     
    31173132                        }
    31183133                }
    31193134
    3120                 $sizes['full'] = array( 'url' => $attachment_url );
     3135                if ( 'image' === $type ) {
     3136                        $sizes['full'] = array( 'url' => $attachment_url );
    31213137
    3122                 if ( isset( $meta['height'], $meta['width'] ) ) {
    3123                         $sizes['full']['height'] = $meta['height'];
    3124                         $sizes['full']['width'] = $meta['width'];
    3125                         $sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape';
     3138                        if ( isset( $meta['height'], $meta['width'] ) ) {
     3139                                $sizes['full']['height'] = $meta['height'];
     3140                                $sizes['full']['width'] = $meta['width'];
     3141                                $sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape';
     3142                        }
     3143
     3144                        array_merge( $response, $sizes['full'] );
    31263145                }
     3146                else if( $meta['sizes']['full']['file'] ) {
     3147                        $sizes['full'] = array(
     3148                                'url'         => $base_url . $meta['sizes']['full']['file'],
     3149                                'height'      => $meta['sizes']['full']['height'],
     3150                                'width'       => $meta['sizes']['full']['width'],
     3151                                'orientation' => $meta['sizes']['full']['height'] < $meta['sizes']['full']['width'] ? 'portrait' : 'landscape'
     3152                        );
     3153                }
    31273154
    3128                 $response = array_merge( $response, array( 'sizes' => $sizes ), $sizes['full'] );
    3129         } elseif ( $meta && 'video' === $type ) {
     3155                $response = array_merge( $response, array( 'sizes' => $sizes ) );
     3156        }
     3157
     3158        if ( $meta && 'video' === $type ) {
    31303159                if ( isset( $meta['width'] ) )
    31313160                        $response['width'] = (int) $meta['width'];
    31323161                if ( isset( $meta['height'] ) )