X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/784f914b1e4b1c62d6657e86397c2e83bcee4295..4ea0dca21bda49aab5ccb91ec12bb4ef5924ed3e:/wp-admin/includes/image-edit.php?ds=sidebyside diff --git a/wp-admin/includes/image-edit.php b/wp-admin/includes/image-edit.php index 8947f537..db11b566 100644 --- a/wp-admin/includes/image-edit.php +++ b/wp-admin/includes/image-edit.php @@ -60,11 +60,11 @@ function wp_image_editor($post_id, $msg = false) {
× ! , 'scale')" class="button button-primary" value="" /> @@ -116,11 +116,11 @@ function wp_image_editor($post_id, $msg = false) {
:
@@ -129,11 +129,11 @@ function wp_image_editor($post_id, $msg = false) {
×
@@ -224,7 +224,6 @@ function wp_image_editor($post_id, $msg = false) {
- save( $filename, $mime_type ); } else { - _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + _deprecated_argument( __FUNCTION__, '3.5.0', __( '$image needs to be an WP_Image_Editor object' ) ); /** This filter is documented in wp-admin/includes/image-edit.php */ $image = apply_filters( 'image_save_pre', $image, $post_id ); /** - * Filter whether to skip saving the image file. + * Filters whether to skip saving the image file. * * Returning a non-null value will short-circuit the save method, * returning that value instead. @@ -388,7 +387,7 @@ function _image_get_preview_ratio($w, $h) { * @return resource|false GD image resource, false otherwise. */ function _rotate_image_resource($img, $angle) { - _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::rotate' ) ); + _deprecated_function( __FUNCTION__, '3.5.0', 'WP_Image_Editor::rotate()' ); if ( function_exists('imagerotate') ) { $rotated = imagerotate($img, $angle, 0); if ( is_resource($rotated) ) { @@ -411,7 +410,7 @@ function _rotate_image_resource($img, $angle) { * @return resource (maybe) flipped image resource. */ function _flip_image_resource($img, $horz, $vert) { - _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::flip' ) ); + _deprecated_function( __FUNCTION__, '3.5.0', 'WP_Image_Editor::flip()' ); $w = imagesx($img); $h = imagesy($img); $dst = wp_imagecreatetruecolor($w, $h); @@ -458,13 +457,13 @@ function _crop_image_resource($img, $x, $y, $w, $h) { * * @since 2.9.0 * - * @param WP_Image_Editor $image {@see WP_Image_Editor} instance. + * @param WP_Image_Editor $image WP_Image_Editor instance. * @param array $changes Array of change operations. - * @return WP_Image_Editor {@see WP_Image_Editor} instance with changes applied. + * @return WP_Image_Editor WP_Image_Editor instance with changes applied. */ function image_edit_apply_changes( $image, $changes ) { if ( is_resource( $image ) ) - _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + _deprecated_argument( __FUNCTION__, '3.5.0', __( '$image needs to be an WP_Image_Editor object' ) ); if ( !is_array($changes) ) return $image; @@ -515,7 +514,7 @@ function image_edit_apply_changes( $image, $changes ) { if ( $image instanceof WP_Image_Editor ) { /** - * Filter the WP_Image_Editor instance before applying changes to the image. + * Filters the WP_Image_Editor instance before applying changes to the image. * * @since 3.5.0 * @@ -526,7 +525,7 @@ function image_edit_apply_changes( $image, $changes ) { } elseif ( is_resource( $image ) ) { /** - * Filter the GD image resource before applying changes to the image. + * Filters the GD image resource before applying changes to the image. * * @since 2.9.0 * @deprecated 3.5.0 Use wp_image_editor_before_change instead. @@ -586,8 +585,7 @@ function image_edit_apply_changes( $image, $changes ) { function stream_preview_image( $post_id ) { $post = get_post( $post_id ); - /** This filter is documented in wp-admin/admin.php */ - @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + wp_raise_memory_limit( 'admin' ); $img = wp_get_image_editor( _load_image_to_edit_path( $post_id ) ); @@ -702,13 +700,11 @@ function wp_restore_image($post_id) { * Saves image to post along with enqueued changes * in $_REQUEST['history'] * - * @global array $_wp_additional_image_sizes - * * @param int $post_id * @return \stdClass */ function wp_save_image( $post_id ) { - global $_wp_additional_image_sizes; + $_wp_additional_image_sizes = wp_get_additional_image_sizes(); $return = new stdClass; $success = $delete = $scaled = $nocrop = false; @@ -763,28 +759,33 @@ function wp_save_image( $post_id ) { $backup_sizes = array(); // Generate new filename. - $path = get_attached_file($post_id); - $path_parts = pathinfo( $path ); - $filename = $path_parts['filename']; + $path = get_attached_file( $post_id ); + + $basename = pathinfo( $path, PATHINFO_BASENAME ); + $dirname = pathinfo( $path, PATHINFO_DIRNAME ); + $ext = pathinfo( $path, PATHINFO_EXTENSION ); + $filename = pathinfo( $path, PATHINFO_FILENAME ); $suffix = time() . rand(100, 999); if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE && - isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) { + isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $basename ) { - if ( 'thumbnail' == $target ) - $new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}"; - else + if ( 'thumbnail' == $target ) { + $new_path = "{$dirname}/{$filename}-temp.{$ext}"; + } else { $new_path = $path; + } } else { - while( true ) { + while ( true ) { $filename = preg_replace( '/-e([0-9]+)$/', '', $filename ); $filename .= "-e{$suffix}"; - $new_filename = "{$filename}.{$path_parts['extension']}"; - $new_path = "{$path_parts['dirname']}/$new_filename"; - if ( file_exists($new_path) ) + $new_filename = "{$filename}.{$ext}"; + $new_path = "{$dirname}/$new_filename"; + if ( file_exists($new_path) ) { $suffix++; - else + } else { break; + } } } @@ -794,18 +795,19 @@ function wp_save_image( $post_id ) { return $return; } - if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) { + if ( 'nothumb' === $target || 'all' === $target || 'full' === $target || $scaled ) { $tag = false; - if ( isset($backup_sizes['full-orig']) ) { - if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) + if ( isset( $backup_sizes['full-orig'] ) ) { + if ( ( ! defined( 'IMAGE_EDIT_OVERWRITE' ) || ! IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] !== $basename ) { $tag = "full-$suffix"; + } } else { $tag = 'full-orig'; } - if ( $tag ) - $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $path_parts['basename']); - + if ( $tag ) { + $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $basename ); + } $success = ( $path === $new_path ) || update_attached_file( $post_id, $new_path ); $meta['file'] = _wp_relative_upload_path( $new_path ); @@ -827,6 +829,21 @@ function wp_save_image( $post_id ) { $success = $delete = $nocrop = true; } + /* + * We need to remove any existing resized image files because + * a new crop or rotate could generate different sizes (and hence, filenames), + * keeping the new resized images from overwriting the existing image files. + * https://core.trac.wordpress.org/ticket/32171 + */ + if ( defined( 'IMAGE_EDIT_OVERWRITE' ) && IMAGE_EDIT_OVERWRITE && ! empty( $meta['sizes'] ) ) { + foreach ( $meta['sizes'] as $size ) { + if ( ! empty( $size['file'] ) && preg_match( '/-e[0-9]{13}-/', $size['file'] ) ) { + $delete_file = path_join( $dirname, $size['file'] ); + wp_delete_file( $delete_file ); + } + } + } + if ( isset( $sizes ) ) { $_sizes = array();