diff --git a/wp-includes/class-wp-image-editor-gd.php b/wp-includes/class-wp-image-editor-gd.php index 79111bfc53..548882dfae 100644 --- a/wp-includes/class-wp-image-editor-gd.php +++ b/wp-includes/class-wp-image-editor-gd.php @@ -114,7 +114,7 @@ class WP_Image_Editor_GD extends WP_Image_Editor { $this->update_size( $size[0], $size[1] ); $this->mime_type = $size['mime']; - return $this->set_quality( $this->quality ); + return true; } /** @@ -394,7 +394,7 @@ class WP_Image_Editor_GD extends WP_Image_Editor { } } elseif ( 'image/jpeg' == $mime_type ) { - if ( ! $this->make_image( $filename, 'imagejpeg', array( $image, $filename, $this->quality ) ) ) + if ( ! $this->make_image( $filename, 'imagejpeg', array( $image, $filename, $this->get_quality() ) ) ) return new WP_Error( 'image_save_error', __('Image Editor Save Failed') ); } else { @@ -442,7 +442,7 @@ class WP_Image_Editor_GD extends WP_Image_Editor { return imagegif( $this->image ); default: header( 'Content-Type: image/jpeg' ); - return imagejpeg( $this->image, null, $this->quality ); + return imagejpeg( $this->image, null, $this->get_quality() ); } } diff --git a/wp-includes/class-wp-image-editor-imagick.php b/wp-includes/class-wp-image-editor-imagick.php index e65dd2e1c1..8bd6e38861 100644 --- a/wp-includes/class-wp-image-editor-imagick.php +++ b/wp-includes/class-wp-image-editor-imagick.php @@ -143,7 +143,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor { if ( is_wp_error( $updated_size ) ) return $updated_size; - return $this->set_quality( $this->quality ); + return true; } /** @@ -160,7 +160,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor { if ( is_wp_error( $quality_result ) ) { return $quality_result; } else { - $quality = $this->quality; + $quality = $this->get_quality(); } try { diff --git a/wp-includes/class-wp-image-editor.php b/wp-includes/class-wp-image-editor.php index f89f7fe35b..5792df3162 100644 --- a/wp-includes/class-wp-image-editor.php +++ b/wp-includes/class-wp-image-editor.php @@ -16,7 +16,8 @@ abstract class WP_Image_Editor { protected $size = null; protected $mime_type = null; protected $default_mime_type = 'image/jpeg'; - protected $quality = 90; + protected $quality = false; + protected $default_quality = 90; /** * Each instance handles a single file. @@ -202,6 +203,49 @@ abstract class WP_Image_Editor { return true; } + /** + * Gets the Image Compression quality on a 1-100% scale. + * + * @since 4.0.0 + * @access public + * + * @return int $quality Compression Quality. Range: [1,100] + */ + public function get_quality() { + if ( ! $this->quality ) { + /** + * Filter the default image compression quality setting. + * + * @since 3.5.0 + * + * @param int $quality Quality level between 1 (low) and 100 (high). + * @param string $mime_type Image mime type. + */ + $quality = apply_filters( 'wp_editor_set_quality', $this->default_quality, $this->mime_type ); + + if ( 'image/jpeg' == $this->mime_type ) { + /** + * Filter the JPEG compression quality for backward-compatibility. + * + * The filter is evaluated under two contexts: 'image_resize', and 'edit_image', + * (when a JPEG image is saved to file). + * + * @since 2.5.0 + * + * @param int $quality Quality level between 0 (low) and 100 (high) of the JPEG. + * @param string $context Context of the filter. + */ + $quality = apply_filters( 'jpeg_quality', $quality, 'image_resize' ); + + if ( ! $this->set_quality( $quality ) ) { + $this->quality = $this->default_quality; + } + } + } + + return $this->quality; + } + /** * Sets Image Compression quality on a 1-100% scale. * @@ -212,41 +256,12 @@ abstract class WP_Image_Editor { * @return boolean|WP_Error True if set successfully; WP_Error on failure. */ public function set_quality( $quality = null ) { - if ( $quality == null ) { - $quality = $this->quality; + // Allow 0, but squash to 1 due to identical images in GD, and for backwards compatibility. + if ( $quality == 0 ) { + $quality = 1; } - /** - * Filter the default image compression quality setting. - * - * @since 3.5.0 - * - * @param int $quality Quality level between 1 (low) and 100 (high). - * @param string $mime_type Image mime type. - */ - $quality = apply_filters( 'wp_editor_set_quality', $quality, $this->mime_type ); - - if ( 'image/jpeg' == $this->mime_type ) { - /** - * Filter the JPEG compression quality for backward-compatibility. - * - * The filter is evaluated under two contexts: 'image_resize', and 'edit_image', - * (when a JPEG image is saved to file). - * - * @since 2.5.0 - * - * @param int $quality Quality level between 0 (low) and 100 (high) of the JPEG. - * @param string $context Context of the filter. - */ - $quality = apply_filters( 'jpeg_quality', $quality, 'image_resize' ); - - // Allow 0, but squash to 1 due to identical images in GD, and for backwards compatibility. - if ( $quality == 0 ) { - $quality = 1; - } - } - - if ( ( $quality >= 1 ) && ( $quality <= 100 ) ){ + if ( ( $quality >= 1 ) && ( $quality <= 100 ) ) { $this->quality = $quality; return true; } else {