From 68729adb57d609ca2d10dfbeaabdd3f75a5574fe Mon Sep 17 00:00:00 2001 From: Mike Schroder Date: Fri, 11 Oct 2019 07:52:12 +0000 Subject: [PATCH] Media: Update fallback previews to support `_wp_make_subsizes()` Allows fallback previews (PDF by default, in core) to save image meta after each size is generated to allow for resuming, and make sizes immediately available. Props azaozz, antpb, progremzion, mikeschroder. See #48111. git-svn-id: https://develop.svn.wordpress.org/trunk@46459 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/image.php | 15 ++++++++---- tests/phpunit/tests/image/functions.php | 32 ++++++++++++------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/wp-admin/includes/image.php b/src/wp-admin/includes/image.php index 1e265d45f7..41efa0ad13 100644 --- a/src/wp-admin/includes/image.php +++ b/src/wp-admin/includes/image.php @@ -581,13 +581,18 @@ function wp_generate_attachment_metadata( $attachment_id, $file ) { // Resize based on the full size image, rather than the source. if ( ! is_wp_error( $uploaded ) ) { - $editor = wp_get_image_editor( $uploaded['path'] ); + $image_file = $uploaded['path']; unset( $uploaded['path'] ); - if ( ! is_wp_error( $editor ) ) { - $metadata['sizes'] = $editor->multi_resize( $merged_sizes ); - $metadata['sizes']['full'] = $uploaded; - } + $metadata['sizes'] = array( + 'full' => $uploaded, + ); + + // Save the meta data before any image post-processing errors could happen. + wp_update_attachment_metadata( $attachment_id, $metadata ); + + // Create sub-sizes saving the image meta after each. + $metadata = _wp_make_subsizes( $merged_sizes, $image_file, $metadata, $attachment_id ); } } } diff --git a/tests/phpunit/tests/image/functions.php b/tests/phpunit/tests/image/functions.php index 4d385ae2dc..8fa47c65a5 100644 --- a/tests/phpunit/tests/image/functions.php +++ b/tests/phpunit/tests/image/functions.php @@ -435,10 +435,10 @@ class Tests_Image_Functions extends WP_UnitTestCase { $expected = array( 'sizes' => array( - 'thumbnail' => array( - 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg', - 'width' => 116, - 'height' => 150, + 'full' => array( + 'file' => 'wordpress-gsoc-flyer-pdf.jpg', + 'width' => 1088, + 'height' => 1408, 'mime-type' => 'image/jpeg', ), 'medium' => array( @@ -453,10 +453,10 @@ class Tests_Image_Functions extends WP_UnitTestCase { 'height' => 1024, 'mime-type' => 'image/jpeg', ), - 'full' => array( - 'file' => 'wordpress-gsoc-flyer-pdf.jpg', - 'width' => 1088, - 'height' => 1408, + 'thumbnail' => array( + 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg', + 'width' => 116, + 'height' => 150, 'mime-type' => 'image/jpeg', ), ), @@ -500,10 +500,10 @@ class Tests_Image_Functions extends WP_UnitTestCase { $expected = array( 'sizes' => array( - 'thumbnail' => array( - 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg', - 'width' => 116, - 'height' => 150, + 'full' => array( + 'file' => 'wordpress-gsoc-flyer-pdf.jpg', + 'width' => 1088, + 'height' => 1408, 'mime-type' => 'image/jpeg', ), 'medium' => array( @@ -518,10 +518,10 @@ class Tests_Image_Functions extends WP_UnitTestCase { 'height' => 1024, 'mime-type' => 'image/jpeg', ), - 'full' => array( - 'file' => 'wordpress-gsoc-flyer-pdf.jpg', - 'width' => 1088, - 'height' => 1408, + 'thumbnail' => array( + 'file' => 'wordpress-gsoc-flyer-pdf-116x150.jpg', + 'width' => 116, + 'height' => 150, 'mime-type' => 'image/jpeg', ), ),