WP_Image_Editor::set_quality()publicWP 3.5.0

Sets Image Compression quality on a 1-100% scale.

Method of the class: WP_Image_Editor{}

Hooks from the method

Return

true|WP_Error. True if set successfully; WP_Error on failure.

Usage

$WP_Image_Editor = new WP_Image_Editor();
$WP_Image_Editor->set_quality( $quality );
$quality(int)
Compression Quality. Range: [1,100]
Default: null

Changelog

Since 3.5.0 Introduced.

WP_Image_Editor::set_quality() code WP 6.5.2

public function set_quality( $quality = null ) {
	// Use the output mime type if present. If not, fall back to the input/initial mime type.
	$mime_type = ! empty( $this->output_mime_type ) ? $this->output_mime_type : $this->mime_type;
	// Get the default quality setting for the mime type.
	$default_quality = $this->get_default_quality( $mime_type );

	if ( null === $quality ) {
		/**
		 * Filters the default image compression quality setting.
		 *
		 * Applies only during initial editor instantiation, or when set_quality() is run
		 * manually without the `$quality` argument.
		 *
		 * The WP_Image_Editor::set_quality() method has priority over the filter.
		 *
		 * @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', $default_quality, $mime_type );

		if ( 'image/jpeg' === $mime_type ) {
			/**
			 * Filters the JPEG compression quality for backward-compatibility.
			 *
			 * Applies only during initial editor instantiation, or when set_quality() is run
			 * manually without the `$quality` argument.
			 *
			 * The WP_Image_Editor::set_quality() method has priority over the filter.
			 *
			 * 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 ( $quality < 0 || $quality > 100 ) {
			$quality = $default_quality;
		}
	}

	// Allow 0, but squash to 1 due to identical images in GD, and for backward compatibility.
	if ( 0 === $quality ) {
		$quality = 1;
	}

	if ( ( $quality >= 1 ) && ( $quality <= 100 ) ) {
		$this->quality = $quality;
		return true;
	} else {
		return new WP_Error( 'invalid_image_quality', __( 'Attempted to set image quality outside of the range [1,100].' ) );
	}
}