wp_constrain_dimensions
Calculates the new dimensions for a down-sampled image.
Description
(array) wp_constrain_dimensions( (int) $current_width, (int) $current_height, (int) $max_width = 0, (int) $max_height = 0 );
If either width or height are empty, no constraint is applied on that dimension.
Returns (array)
First item is the width, the second item is the height.
Parameters (4)
- 0. $current_width (int)
- Current width of the image.
- 1. $current_height (int)
- Current height of the image.
- 2. $max_width — Optional. (int)
- Max width in pixels to constrain to. Default 0.
- 3. $max_height — Optional. (int)
- Max height in pixels to constrain to. Default 0.
Usage
if ( !function_exists( 'wp_constrain_dimensions' ) ) { require_once ABSPATH . WPINC . '/media.php'; } // Current width of the image. $current_width = -1; // Current height of the image. $current_height = -1; // Optional. Max width in pixels to constrain to. Default 0. $max_width = -1; // Optional. Max height in pixels to constrain to. Default 0. $max_height = -1; // NOTICE! Understand what this does before running. $result = wp_constrain_dimensions($current_width, $current_height, $max_width, $max_height);
Defined (1)
The function is defined in the following location(s).
- /wp-includes/media.php
- function wp_constrain_dimensions( $current_width, $current_height, $max_width = 0, $max_height = 0 ) {
- if ( !$max_width && !$max_height )
- return array( $current_width, $current_height );
- $width_ratio = $height_ratio = 1.0;
- $did_width = $did_height = false;
- if ( $max_width > 0 && $current_width > 0 && $current_width > $max_width ) {
- $width_ratio = $max_width / $current_width;
- $did_width = true;
- }
- if ( $max_height > 0 && $current_height > 0 && $current_height > $max_height ) {
- $height_ratio = $max_height / $current_height;
- $did_height = true;
- }
- // Calculate the larger/smaller ratios
- $smaller_ratio = min( $width_ratio, $height_ratio );
- $larger_ratio = max( $width_ratio, $height_ratio );
- if ( (int) round( $current_width * $larger_ratio ) > $max_width || (int) round( $current_height * $larger_ratio ) > $max_height ) {
- // The larger ratio is too big. It would result in an overflow.
- $ratio = $smaller_ratio;
- } else {
- // The larger ratio fits, and is likely to be a more "snug" fit.
- $ratio = $larger_ratio;
- }
- // Very small dimensions may result in 0, 1 should be the minimum.
- $w = max ( 1, (int) round( $current_width * $ratio ) );
- $h = max ( 1, (int) round( $current_height * $ratio ) );
- // Sometimes, due to rounding, we'll end up with a result like this: 465x700 in a 177x177 box is 117x176... a pixel short
- // We also have issues with recursive calls resulting in an ever-changing result. Constraining to the result of a constraint should yield the original result.
- // Thus we look for dimensions that are one pixel shy of the max value and bump them up
- // Note: $did_width means it is possible $smaller_ratio == $width_ratio.
- if ( $did_width && $w == $max_width - 1 ) {
- $w = $max_width; // Round it up
- }
- // Note: $did_height means it is possible $smaller_ratio == $height_ratio.
- if ( $did_height && $h == $max_height - 1 ) {
- $h = $max_height; // Round it up
- }
- /**
- * Filters dimensions to constrain down-sampled images to.
- *
- * @since 4.1.0
- *
- * @param array $dimensions The image width and height.
- * @param int $current_width The current width of the image.
- * @param int $current_height The current height of the image.
- * @param int $max_width The maximum width permitted.
- * @param int $max_height The maximum height permitted.
- */
- return apply_filters( 'wp_constrain_dimensions', array( $w, $h ), $current_width, $current_height, $max_width, $max_height );
- }