diff --git src/wp-admin/includes/image.php src/wp-admin/includes/image.php
index 84e4c4c..4c33dd5 100644
|
|
|
function wp_generate_attachment_metadata( $attachment_id, $file ) { |
| 76 | 76 | |
| 77 | 77 | $metadata = array(); |
| 78 | 78 | $support = false; |
| 79 | | if ( preg_match('!^image/!', get_post_mime_type( $attachment )) && file_is_displayable_image($file) ) { |
| | 79 | $mime_type = get_post_mime_type( $attachment ); |
| | 80 | |
| | 81 | /** |
| | 82 | * Filter attachment mime-types that support thumbnail fallback. |
| | 83 | * |
| | 84 | * @since 4.7.0 |
| | 85 | * |
| | 86 | * @param array $mime_types An array of mime-types. |
| | 87 | */ |
| | 88 | $attachment_fallback_mimetypes = apply_filters( 'attachment_fallback_mimetypes', array( 'application/pdf' ) ); |
| | 89 | |
| | 90 | if ( preg_match( '!^image/!', $mime_type ) && file_is_displayable_image( $file ) ) { |
| 80 | 91 | $imagesize = getimagesize( $file ); |
| 81 | 92 | $metadata['width'] = $imagesize[0]; |
| 82 | 93 | $metadata['height'] = $imagesize[1]; |
| … |
… |
function wp_generate_attachment_metadata( $attachment_id, $file ) { |
| 201 | 212 | } |
| 202 | 213 | } |
| 203 | 214 | } |
| | 215 | // Check to see if we support a fallback thumbnail for this mime-type. |
| | 216 | else if ( in_array( $mime_type, $attachment_fallback_mimetypes ) ) { |
| | 217 | $editor = wp_get_image_editor( $file ); |
| | 218 | $sizes = array( |
| | 219 | 'thumbnail' => array( |
| | 220 | 'width' => get_option( "thumbnail_size_w" ), |
| | 221 | 'height' => get_option( "thumbnail_size_h" ), |
| | 222 | 'crop' => get_option( "thumbnail_crop" ) |
| | 223 | ) |
| | 224 | ); |
| | 225 | |
| | 226 | if ( ! is_wp_error( $editor ) ) { // No support for this type of file |
| | 227 | $uploaded = $editor->save( $file . '.jpg' ); |
| | 228 | unset( $uploaded['path'] ); |
| | 229 | |
| | 230 | if ( ! is_wp_error( $uploaded ) ) { |
| | 231 | $metadata['sizes'] = $editor->multi_resize( $sizes ); |
| | 232 | $metadata['sizes']['full'] = $uploaded; |
| | 233 | } |
| | 234 | } |
| | 235 | } |
| 204 | 236 | |
| 205 | 237 | // Remove the blob of binary data from the array. |
| 206 | 238 | if ( $metadata ) { |
diff --git src/wp-admin/includes/media.php src/wp-admin/includes/media.php
index 1ccb998..c79e312 100644
|
|
|
function edit_form_image_editor( $post ) { |
| 2766 | 2766 | |
| 2767 | 2767 | echo wp_video_shortcode( $attr ); |
| 2768 | 2768 | |
| 2769 | | else : |
| | 2769 | elseif ( isset( $thumb_url[0] ) ): |
| | 2770 | |
| | 2771 | ?> |
| | 2772 | <div class="wp_attachment_image wp-clearfix" id="media-head-<?php echo $attachment_id; ?>"> |
| | 2773 | <p id="thumbnail-head-<?php echo $attachment_id; ?>"> |
| | 2774 | <img class="thumbnail" src="<?php echo set_url_scheme( $thumb_url[0] ); ?>" style="max-width:100%" alt="" /> |
| | 2775 | </p> |
| | 2776 | </div> |
| | 2777 | <?php |
| | 2778 | |
| | 2779 | else: |
| 2770 | 2780 | |
| 2771 | 2781 | /** |
| 2772 | 2782 | * Fires when an attachment type can't be rendered in the edit form. |
diff --git src/wp-includes/class-wp-image-editor-imagick.php src/wp-includes/class-wp-image-editor-imagick.php
index 82b872d..211c600 100644
|
|
|
class WP_Image_Editor_Imagick extends WP_Image_Editor { |
| 144 | 144 | wp_raise_memory_limit( 'image' ); |
| 145 | 145 | |
| 146 | 146 | try { |
| 147 | | $this->image = new Imagick( $this->file ); |
| | 147 | $this->image = new Imagick(); |
| | 148 | |
| | 149 | $file_parts = pathinfo( $this->file ); |
| | 150 | |
| | 151 | // By default, PDFs are rendered in a very low resolution. |
| | 152 | // We want the thumbnail to be readable, so increase the rendering resolution. |
| | 153 | if ( 'pdf' == $file_parts['extension'] ) { |
| | 154 | $this->image->setResolution( 200, 200 ); |
| | 155 | } |
| | 156 | |
| | 157 | // TODO: This is the first readImage use, and we need to be sure it's available. |
| | 158 | // Reading image after Imagick instantiation because `setResolution` |
| | 159 | // only applies correctly before the image is read. |
| | 160 | $this->image->readImage( $this->file ); |
| 148 | 161 | |
| 149 | 162 | if ( ! $this->image->valid() ) |
| 150 | 163 | return new WP_Error( 'invalid_image', __('File is not an image.'), $this->file); |
diff --git src/wp-includes/media-template.php src/wp-includes/media-template.php
index c669921..3608a0c 100644
|
|
|
function wp_print_media_templates() { |
| 290 | 290 | <div class="thumbnail thumbnail-{{ data.type }}"> |
| 291 | 291 | <# if ( data.uploading ) { #> |
| 292 | 292 | <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 ) { #> |
| 294 | 294 | <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 ) { #> |
| 296 | 296 | <img class="details-image" src="{{ data.sizes.full.url }}" draggable="false" alt="" /> |
| 297 | 297 | <# } else if ( -1 === jQuery.inArray( data.type, [ 'audio', 'video' ] ) ) { #> |
| 298 | 298 | <img class="details-image icon" src="{{ data.icon }}" draggable="false" alt="" /> |
| … |
… |
function wp_print_media_templates() { |
| 454 | 454 | <div class="centered"> |
| 455 | 455 | <# if ( data.image && data.image.src && data.image.src !== data.icon ) { #> |
| 456 | 456 | <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="" /> |
| 457 | 459 | <# } else { #> |
| 458 | 460 | <img src="{{ data.icon }}" class="icon" draggable="false" alt="" /> |
| 459 | 461 | <# } #> |
diff --git src/wp-includes/media.php src/wp-includes/media.php
index 7a316d1..e1e4840 100644
|
|
|
function image_hwstring( $width, $height ) { |
| 183 | 183 | * the image is an intermediate size. False on failure. |
| 184 | 184 | */ |
| 185 | 185 | function image_downsize( $id, $size = 'medium' ) { |
| | 186 | $is_image = wp_attachment_is_image( $id ); |
| 186 | 187 | |
| 187 | | if ( !wp_attachment_is_image($id) ) |
| 188 | | return false; |
| 189 | | |
| 190 | | /** |
| 191 | | * Filters whether to preempt the output of image_downsize(). |
| 192 | | * |
| 193 | | * Passing a truthy value to the filter will effectively short-circuit |
| 194 | | * down-sizing the image, returning that value as output instead. |
| 195 | | * |
| 196 | | * @since 2.5.0 |
| 197 | | * |
| 198 | | * @param bool $downsize Whether to short-circuit the image downsize. Default false. |
| 199 | | * @param int $id Attachment ID for image. |
| 200 | | * @param array|string $size Size of image. Image size or array of width and height values (in that order). |
| 201 | | * Default 'medium'. |
| 202 | | */ |
| 203 | | if ( $out = apply_filters( 'image_downsize', false, $id, $size ) ) { |
| 204 | | return $out; |
| | 188 | if ( $is_image ) { |
| | 189 | /** |
| | 190 | * Filters whether to preempt the output of image_downsize(). |
| | 191 | * |
| | 192 | * Passing a truthy value to the filter will effectively short-circuit |
| | 193 | * down-sizing the image, returning that value as output instead. |
| | 194 | * |
| | 195 | * @since 2.5.0 |
| | 196 | * |
| | 197 | * @param bool $downsize Whether to short-circuit the image downsize. Default false. |
| | 198 | * @param int $id Attachment ID for image. |
| | 199 | * @param array|string $size Size of image. Image size or array of width and height values (in that order). |
| | 200 | * Default 'medium'. |
| | 201 | */ |
| | 202 | if ( $out = apply_filters( 'image_downsize', false, $id, $size ) ) { |
| | 203 | return $out; |
| | 204 | } |
| 205 | 205 | } |
| 206 | 206 | |
| 207 | 207 | $img_url = wp_get_attachment_url($id); |
| … |
… |
function image_downsize( $id, $size = 'medium' ) { |
| 210 | 210 | $is_intermediate = false; |
| 211 | 211 | $img_url_basename = wp_basename($img_url); |
| 212 | 212 | |
| | 213 | // If the file isn't an image, attempt to replace its URL with a rendered image from its meta. |
| | 214 | if ( ! $is_image ) { |
| | 215 | if ( ! empty( $meta['sizes'] ) ) { |
| | 216 | $img_url = str_replace( $img_url_basename, $meta['sizes']['full']['file'], $img_url ); |
| | 217 | $img_url_basename = $meta['sizes']['full']['file']; |
| | 218 | $width = $meta['sizes']['full']['width']; |
| | 219 | $height = $meta['sizes']['full']['height']; |
| | 220 | } else { |
| | 221 | return false; |
| | 222 | } |
| | 223 | } |
| | 224 | |
| 213 | 225 | // try for a new style intermediate size |
| 214 | 226 | if ( $intermediate = image_get_intermediate_size($id, $size) ) { |
| 215 | 227 | $img_url = str_replace($img_url_basename, $intermediate['file'], $img_url); |
| … |
… |
function image_downsize( $id, $size = 'medium' ) { |
| 226 | 238 | $is_intermediate = true; |
| 227 | 239 | } |
| 228 | 240 | } |
| | 241 | |
| 229 | 242 | if ( !$width && !$height && isset( $meta['width'], $meta['height'] ) ) { |
| 230 | 243 | // any other type: use the real image |
| 231 | 244 | $width = $meta['width']; |
| … |
… |
function image_get_intermediate_size( $post_id, $size = 'thumbnail' ) { |
| 685 | 698 | if ( is_array( $size ) ) { |
| 686 | 699 | $candidates = array(); |
| 687 | 700 | |
| | 701 | if ( ! isset( $imagedata['file'] ) && isset( $imagedata['sizes']['full'] ) ) { |
| | 702 | $imagedata['height'] = $imagedata['sizes']['full']['height']; |
| | 703 | $imagedata['width'] = $imagedata['sizes']['full']['width']; |
| | 704 | } |
| | 705 | |
| 688 | 706 | foreach ( $imagedata['sizes'] as $_size => $data ) { |
| 689 | 707 | // If there's an exact match to an existing image size, short circuit. |
| 690 | 708 | if ( $data['width'] == $size[0] && $data['height'] == $size[1] ) { |
| … |
… |
function image_get_intermediate_size( $post_id, $size = 'thumbnail' ) { |
| 738 | 756 | } |
| 739 | 757 | |
| 740 | 758 | // include the full filesystem path of the intermediate file |
| 741 | | if ( empty($data['path']) && !empty($data['file']) ) { |
| | 759 | if ( empty( $data['path'] ) && ! empty( $data['file'] ) && ! empty( $imagedata['file'] ) ) { |
| 742 | 760 | $file_url = wp_get_attachment_url($post_id); |
| 743 | 761 | $data['path'] = path_join( dirname($imagedata['file']), $data['file'] ); |
| 744 | 762 | $data['url'] = path_join( dirname($file_url), $data['file'] ); |
| … |
… |
function wp_prepare_attachment_for_js( $attachment ) { |
| 3127 | 3145 | if ( current_user_can( 'delete_post', $attachment->ID ) ) |
| 3128 | 3146 | $response['nonces']['delete'] = wp_create_nonce( 'delete-post_' . $attachment->ID ); |
| 3129 | 3147 | |
| 3130 | | if ( $meta && 'image' === $type ) { |
| | 3148 | if ( $meta && ! empty( $meta['sizes'] ) ) { |
| 3131 | 3149 | $sizes = array(); |
| 3132 | 3150 | |
| 3133 | 3151 | /** This filter is documented in wp-admin/includes/media.php */ |
| … |
… |
function wp_prepare_attachment_for_js( $attachment ) { |
| 3175 | 3193 | } |
| 3176 | 3194 | } |
| 3177 | 3195 | |
| 3178 | | $sizes['full'] = array( 'url' => $attachment_url ); |
| | 3196 | if ( 'image' === $type ) { |
| | 3197 | $sizes['full'] = array( 'url' => $attachment_url ); |
| | 3198 | |
| | 3199 | if ( isset( $meta['height'], $meta['width'] ) ) { |
| | 3200 | $sizes['full']['height'] = $meta['height']; |
| | 3201 | $sizes['full']['width'] = $meta['width']; |
| | 3202 | $sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape'; |
| | 3203 | } |
| 3179 | 3204 | |
| 3180 | | if ( isset( $meta['height'], $meta['width'] ) ) { |
| 3181 | | $sizes['full']['height'] = $meta['height']; |
| 3182 | | $sizes['full']['width'] = $meta['width']; |
| 3183 | | $sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape'; |
| | 3205 | array_merge( $response, $sizes['full'] ); |
| 3184 | 3206 | } |
| | 3207 | else if ( $meta['sizes']['full']['file'] ) { |
| | 3208 | $sizes['full'] = array( |
| | 3209 | 'url' => $base_url . $meta['sizes']['full']['file'], |
| | 3210 | 'height' => $meta['sizes']['full']['height'], |
| | 3211 | 'width' => $meta['sizes']['full']['width'], |
| | 3212 | 'orientation' => $meta['sizes']['full']['height'] < $meta['sizes']['full']['width'] ? 'portrait' : 'landscape' |
| | 3213 | ); |
| | 3214 | } |
| | 3215 | |
| | 3216 | $response = array_merge( $response, array( 'sizes' => $sizes ) ); |
| | 3217 | } |
| 3185 | 3218 | |
| 3186 | | $response = array_merge( $response, array( 'sizes' => $sizes ), $sizes['full'] ); |
| 3187 | | } elseif ( $meta && 'video' === $type ) { |
| | 3219 | if ( $meta && 'video' === $type ) { |
| 3188 | 3220 | if ( isset( $meta['width'] ) ) |
| 3189 | 3221 | $response['width'] = (int) $meta['width']; |
| 3190 | 3222 | if ( isset( $meta['height'] ) ) |