Ticket #37840: 37840_1.diff
| File 37840_1.diff, 8.2 KB (added by , 9 years ago) |
|---|
-
src/wp-admin/includes/image.php
97 97 $sizes[$s]['width'] = intval( $_wp_additional_image_sizes[$s]['width'] ); 98 98 } else { 99 99 // For default sizes set in options 100 $sizes[$s]['width'] = get_option( "{$s}_size_w" );100 $sizes[$s]['width'] = get_option( "{$s}_size_w", $metadata['width'] ); 101 101 } 102 102 103 103 if ( isset( $_wp_additional_image_sizes[$s]['height'] ) ) { … … 105 105 $sizes[$s]['height'] = intval( $_wp_additional_image_sizes[$s]['height'] ); 106 106 } else { 107 107 // For default sizes set in options 108 $sizes[$s]['height'] = get_option( "{$s}_size_h" );108 $sizes[$s]['height'] = get_option( "{$s}_size_h", $metadata['height'] ); 109 109 } 110 110 111 111 if ( isset( $_wp_additional_image_sizes[$s]['crop'] ) ) { … … 113 113 $sizes[$s]['crop'] = $_wp_additional_image_sizes[$s]['crop']; 114 114 } else { 115 115 // For default sizes set in options 116 $sizes[$s]['crop'] = get_option( "{$s}_crop" );116 $sizes[$s]['crop'] = get_option( "{$s}_crop", false ); 117 117 } 118 118 } 119 119 -
src/wp-includes/class-wp-image-editor-gd.php
113 113 imagesavealpha( $this->image, true ); 114 114 } 115 115 116 $this->filesize = @filesize( $this->file ); 116 117 $this->update_size( $size[0], $size[1] ); 117 118 $this->mime_type = $size['mime']; 118 119 … … 243 244 $image = $this->_resize( $size_data['width'], $size_data['height'], $size_data['crop'] ); 244 245 $duplicate = ( ( $orig_size['width'] == $size_data['width'] ) && ( $orig_size['height'] == $size_data['height'] ) ); 245 246 247 if ( 'full' == $size ) { 248 if ( true === $this->can_save_optimised_full_size() ) { 249 $duplicate = false; 250 } 251 } 252 246 253 if ( ! is_wp_error( $image ) && ! $duplicate ) { 247 254 $resized = $this->_save( $image ); 248 255 -
src/wp-includes/class-wp-image-editor-imagick.php
170 170 return new WP_Error( 'invalid_image', $e->getMessage(), $this->file ); 171 171 } 172 172 173 $this->filesize = @filesize( $this->file ); 173 174 $updated_size = $this->update_size(); 174 175 if ( is_wp_error( $updated_size ) ) { 175 176 return $updated_size; … … 464 465 $resize_result = $this->resize( $size_data['width'], $size_data['height'], $size_data['crop'] ); 465 466 $duplicate = ( ( $orig_size['width'] == $size_data['width'] ) && ( $orig_size['height'] == $size_data['height'] ) ); 466 467 468 if ( 'full' == $size ) { 469 if ( true === $this->can_save_optimised_full_size() ) { 470 $duplicate = false; 471 } 472 } 473 467 474 if ( ! is_wp_error( $resize_result ) && ! $duplicate ) { 468 475 $resized = $this->_save( $this->image ); 469 476 -
src/wp-includes/class-wp-image-editor.php
18 18 protected $default_mime_type = 'image/jpeg'; 19 19 protected $quality = false; 20 20 protected $default_quality = 82; 21 protected $filesize = null; 22 protected $minimum_filesize_difference = false; 23 protected $default_minimum_filesize_difference = 15; 21 24 22 25 /** 23 26 * Each instance handles a single file. … … 486 489 487 490 return $extensions[0]; 488 491 } 492 493 /** 494 * Gets minimum filesize difference for compressed full size images. 495 * 496 * @since 4.8.0 497 * @access public 498 * 499 * @return int $minimum_filesize_difference Minimum filesize difference. Range [0-100] 500 */ 501 public function get_minimum_filesize_difference() { 502 if ( ! $this->minimum_filesize_difference ) { 503 $this->set_minimum_filesize_difference(); 504 } 505 506 return $this->minimum_filesize_difference; 507 } 508 509 /** 510 * Sets minimum filesize difference for compressed full images, 0-100% scale. 511 * 512 * @since 4.8.0 513 * @access public 514 * 515 * @param int $minimum_filesize_difference Minimum filesize difference. Range [0-100] 516 * @return true|WP_Error True if set successfully; WP_Error on failure. 517 */ 518 public function set_minimum_filesize_difference( $minimum_filesize_difference = null ) { 519 if ( null === $minimum_filesize_difference ) { 520 /** 521 * Filters the default minimum filesize difference. Range [0-100] 522 * 523 * Applies only during initial editor instantiation, or when set_minimum_filesize_difference() is run 524 * manually without the `$minimum_filesize_difference` argument. 525 * 526 * set_minimum_filesize_difference() has priority over the filter. 527 * 528 * @since 4.8.0 529 * 530 * @param int $default_minimum_filesize_difference Minimum filesize difference. Range [0-100] 531 * @param string $mime_type Image mime type. 532 */ 533 $minimum_filesize_difference = apply_filters( 'wp_image_set_minimum_filesize_difference', $this->default_minimum_filesize_difference, $this->mime_type ); 534 535 536 if ( $minimum_filesize_difference < 0 || $minimum_filesize_difference > 100 ) { 537 $minimum_filesize_difference = $this->default_minimum_filesize_difference; 538 } 539 } 540 541 if ( ( $minimum_filesize_difference >= 0 ) && ( $minimum_filesize_difference <= 100 ) ) { 542 $this->minimum_filesize_difference = $minimum_filesize_difference; 543 return true; 544 } else { 545 return new WP_Error( 'invalid_filesize_difference', __('Attempted to set filesize difference outside of the range [1,100].') ); 546 } 547 } 548 549 /** 550 * Should we save the optimised version of the 'full' image? 551 * 552 * If we're optimising the 'full' image size then we need to compare image sizes. 553 * If the percentage of the image size decrease is greater than our set value 554 * then we should store the image. 555 * 556 * See trac ticket #37840 557 * 558 * @since 4.8.0 559 * @access protected 560 * 561 * @return bool True if we should save the image, otherwise False. 562 */ 563 protected function can_save_optimised_full_size() { 564 ob_start(); 565 $this->stream(); 566 $optimised_size = ob_get_length(); 567 ob_end_clean(); 568 569 // Make sure we've got numbers to calculate with 570 if( is_numeric( $optimised_size ) && is_numeric( $this->filesize ) ) { 571 $perc_decrease = ( ( $optimised_size - $this->filesize ) / ( $this->filesize * - 1 ) ) * 100; 572 573 if ( $this->get_minimum_filesize_difference() <= $perc_decrease ) { 574 return true; 575 } 576 } 577 578 return false; 579 } 489 580 } 490 581 -
src/wp-includes/media.php
785 785 */ 786 786 function get_intermediate_image_sizes() { 787 787 $_wp_additional_image_sizes = wp_get_additional_image_sizes(); 788 $image_sizes = array('thumbnail', 'medium', 'medium_large', 'large' ); // Standard sizes788 $image_sizes = array('thumbnail', 'medium', 'medium_large', 'large', 'full'); // Standard sizes 789 789 if ( ! empty( $_wp_additional_image_sizes ) ) { 790 790 $image_sizes = array_merge( $image_sizes, array_keys( $_wp_additional_image_sizes ) ); 791 791 } … … 796 796 * @since 2.5.0 797 797 * 798 798 * @param array $image_sizes An array of intermediate image sizes. Defaults 799 * are 'thumbnail', 'medium', 'medium_large', 'large' .799 * are 'thumbnail', 'medium', 'medium_large', 'large', 'full. 800 800 */ 801 801 return apply_filters( 'intermediate_image_sizes', $image_sizes ); 802 802 } -
.