The image_downsize WordPress PHP Filter allows you to control the output of the image_downsize() function by short-circuiting the downsizing process and returning a custom value instead.
Usage
add_filter( 'image_downsize', 'your_custom_function', 10, 3 );
function your_custom_function( $downsize, $id, $size ) {
// Your custom code here
return $downsize;
}
Parameters
$downsize(bool|array): Whether to short-circuit the image downsize.$id(int): Attachment ID for the image.$size(string|int[]): Requested image size, can be any registered image size name or an array of width and height values in pixels (in that order).
More information
See WordPress Developer Resources: image_downsize
Examples
Prevent Image Downsizing
Prevent downsizing of images larger than 1200px wide.
add_filter( 'image_downsize', 'prevent_large_image_downsize', 10, 3 );
function prevent_large_image_downsize( $downsize, $id, $size ) {
$image_data = wp_get_attachment_metadata( $id );
if ( $image_data['width'] > 1200 ) {
return true;
}
return $downsize;
}
Change Image Size
Force all images to be medium size.
add_filter( 'image_downsize', 'force_medium_image_size', 10, 3 );
function force_medium_image_size( $downsize, $id, $size ) {
return image_downsize( $id, 'medium' );
}
Custom Image Ratio
Keep the image ratio but limit the width to 600px.
add_filter( 'image_downsize', 'custom_image_ratio', 10, 3 );
function custom_image_ratio( $downsize, $id, $size ) {
$image_data = wp_get_attachment_metadata( $id );
$ratio = $image_data['height'] / $image_data['width'];
$new_width = 600;
$new_height = $new_width * $ratio;
return array( wp_get_attachment_url( $id ), $new_width, $new_height, false );
}
Add Watermark to Downscaled Images
Apply a watermark to downscaled images.
add_filter( 'image_downsize', 'add_watermark_to_downscaled_images', 10, 3 );
function add_watermark_to_downscaled_images( $downsize, $id, $size ) {
// Check if it's a downscaled image
if ( !is_array( $size ) ) {
return $downsize;
}
// Apply watermark function
$watermarked_image = apply_watermark( $id );
return $watermarked_image;
}
Disable Image Downsizing for Admins
Disable image downsizing for admin users.
add_filter( 'image_downsize', 'disable_image_downsize_for_admins', 10, 3 );
function disable_image_downsize_for_admins( $downsize, $id, $size ) {
if ( current_user_can( 'manage_options' ) ) {
return true;
}
return $downsize;
}