Media: improve support for lossless WebP.
When uploading lossless WebP images, WordPress now correctly outputs lossless WebP with both the Imagick and GD image editors. Props: adamsilverstein, martinkrcho. Fixes #60291. Built from https://develop.svn.wordpress.org/trunk@59145 git-svn-id: http://core.svn.wordpress.org/trunk@58541 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
0d0634dbc9
commit
28cc273c2b
|
@ -571,6 +571,38 @@ class WP_Image_Editor_GD extends WP_Image_Editor {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets Image Compression quality on a 1-100% scale. Handles WebP lossless images.
|
||||||
|
*
|
||||||
|
* @since 6.7.0
|
||||||
|
*
|
||||||
|
* @param int $quality Compression Quality. Range: [1,100]
|
||||||
|
* @return true|WP_Error True if set successfully; WP_Error on failure.
|
||||||
|
*/
|
||||||
|
public function set_quality( $quality = null ) {
|
||||||
|
$quality_result = parent::set_quality( $quality );
|
||||||
|
if ( is_wp_error( $quality_result ) ) {
|
||||||
|
return $quality_result;
|
||||||
|
} else {
|
||||||
|
$quality = $this->get_quality();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle setting the quality for WebP lossless images, see https://php.watch/versions/8.1/gd-webp-lossless.
|
||||||
|
try {
|
||||||
|
if ( 'image/webp' === $this->mime_type && defined( 'IMG_WEBP_LOSSLESS' ) ) {
|
||||||
|
$webp_info = wp_get_webp_info( $this->file );
|
||||||
|
if ( ! empty( $webp_info['type'] ) && 'lossless' === $webp_info['type'] ) {
|
||||||
|
$quality = IMG_WEBP_LOSSLESS;
|
||||||
|
parent::set_quality( $quality );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch ( Exception $e ) {
|
||||||
|
return new WP_Error( 'image_quality_error', $e->getMessage() );
|
||||||
|
}
|
||||||
|
$this->quality = $quality;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns stream of current image.
|
* Returns stream of current image.
|
||||||
*
|
*
|
||||||
|
|
|
@ -215,6 +215,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
|
||||||
// Use WebP lossless settings.
|
// Use WebP lossless settings.
|
||||||
$this->image->setImageCompressionQuality( 100 );
|
$this->image->setImageCompressionQuality( 100 );
|
||||||
$this->image->setOption( 'webp:lossless', 'true' );
|
$this->image->setOption( 'webp:lossless', 'true' );
|
||||||
|
parent::set_quality( 100 );
|
||||||
} else {
|
} else {
|
||||||
$this->image->setImageCompressionQuality( $quality );
|
$this->image->setImageCompressionQuality( $quality );
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '6.7-alpha-59143';
|
$wp_version = '6.7-alpha-59145';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
Loading…
Reference in New Issue