diff -r 48c4eec2b7e6 -r 8c2e4d02f4ef wp/wp-admin/includes/image-edit.php --- a/wp/wp-admin/includes/image-edit.php Fri Sep 05 18:40:08 2025 +0200 +++ b/wp/wp-admin/includes/image-edit.php Fri Sep 05 18:52:52 2025 +0200 @@ -75,9 +75,9 @@ ) ) { $note_no_rotate = ''; ?> - - - + + + ' . __( 'Image rotation is not supported by your web host.' ) . '

'; @@ -88,8 +88,8 @@ } ?>
- - + + @@ -293,7 +293,7 @@
- +
@@ -534,8 +534,8 @@ * @see WP_Image_Editor::rotate() * * @ignore - * @param resource|GdImage $img Image resource. - * @param float|int $angle Image rotation angle, in degrees. + * @param resource|GdImage $img Image resource. + * @param float|int $angle Image rotation angle, in degrees. * @return resource|GdImage|false GD image resource or GdImage instance, false otherwise. */ function _rotate_image_resource( $img, $angle ) { @@ -735,10 +735,10 @@ $w = $size['width']; $h = $size['height']; - $scale = 1 / _image_get_preview_ratio( $w, $h ); // Discard preview scaling. + $scale = isset( $sel->r ) ? $sel->r : 1 / _image_get_preview_ratio( $w, $h ); // Discard preview scaling. $image->crop( (int) ( $sel->x * $scale ), (int) ( $sel->y * $scale ), (int) ( $sel->w * $scale ), (int) ( $sel->h * $scale ) ); } else { - $scale = 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // Discard preview scaling. + $scale = isset( $sel->r ) ? $sel->r : 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // Discard preview scaling. $image = _crop_image_resource( $image, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale ); } break; @@ -826,9 +826,10 @@ } } elseif ( isset( $meta['width'], $meta['height'] ) ) { $backup_sizes[ "full-$suffix" ] = array( - 'width' => $meta['width'], - 'height' => $meta['height'], - 'file' => $parts['basename'], + 'width' => $meta['width'], + 'height' => $meta['height'], + 'filesize' => $meta['filesize'], + 'file' => $parts['basename'], ); } } @@ -839,6 +840,14 @@ $meta['file'] = _wp_relative_upload_path( $restored_file ); $meta['width'] = $data['width']; $meta['height'] = $data['height']; + if ( isset( $data['filesize'] ) ) { + /* + * Restore the original filesize if it was backed up. + * + * See https://core.trac.wordpress.org/ticket/59684. + */ + $meta['filesize'] = $data['filesize']; + } } foreach ( $default_sizes as $default_size ) { @@ -997,8 +1006,9 @@ } } + $saved_image = wp_save_image_file( $new_path, $img, $post->post_mime_type, $post_id ); // Save the full-size file, also needed to create sub-sizes. - if ( ! wp_save_image_file( $new_path, $img, $post->post_mime_type, $post_id ) ) { + if ( ! $saved_image ) { $return->error = esc_js( __( 'Unable to save the image.' ) ); return $return; } @@ -1018,9 +1028,10 @@ if ( $tag ) { $backup_sizes[ $tag ] = array( - 'width' => $meta['width'], - 'height' => $meta['height'], - 'file' => $basename, + 'width' => $meta['width'], + 'height' => $meta['height'], + 'filesize' => $meta['filesize'], + 'file' => $basename, ); } @@ -1028,9 +1039,10 @@ $meta['file'] = _wp_relative_upload_path( $new_path ); - $size = $img->get_size(); - $meta['width'] = $size['width']; - $meta['height'] = $size['height']; + $size = $img->get_size(); + $meta['width'] = $size['width']; + $meta['height'] = $size['height']; + $meta['filesize'] = $saved_image['filesize']; if ( $success && ( 'nothumb' === $target || 'all' === $target ) ) { $sizes = get_intermediate_image_sizes();