Retrieve the image’s intermediate size (resized) path, width, and height.

The $size parameter can be an array with the width and height respectively. If the size matches the ‘sizes’ metadata array for width and height, then it will be used. If there is no direct match, then the nearest image size larger than the specified size will be used. If nothing is found, then the function will break out and return false.

The metadata ‘sizes’ is used for compatible sizes that can be used for the parameter $size value.

The url path will be given, when the $size parameter is a string.

If you are passing an array for the $size, you should consider using add_image_size() so that a cropped version is generated. It’s much more efficient than having to find the closest-sized image and then having the browser scale down the image.


image_get_intermediate_size( $post_id, $size = 'thumbnail' )
 (int) Attachment ID for image.
 (array|string) Optional, default is 'thumbnail'. Size of image, either array or string.
Default: 'thumbnail'


(boolean|array) False on failure or array of file path, width, and height on success.


function image_get_intermediate_size($post_id, $size='thumbnail') {
	if ( !is_array( $imagedata = wp_get_attachment_metadata( $post_id ) ) )
		return false;

	// get the best one for a specified set of dimensions
	if ( is_array($size) && !empty($imagedata['sizes']) ) {
		foreach ( $imagedata['sizes'] as $_size => $data ) {
			// already cropped to width or height; so use this size
			if ( ( $data['width'] == $size[0] && $data['height'] <= $size[1] ) || ( $data['height'] == $size[1] && $data['width'] <= $size[0] ) ) {
				$file = $data['file'];
				list($width, $height) = image_constrain_size_for_editor( $data['width'], $data['height'], $size );
				return compact( 'file', 'width', 'height' );
			// add to lookup table: area => size
			$areas[$data['width'] * $data['height']] = $_size;
		if ( !$size || !empty($areas) ) {
			// find for the smallest image not smaller than the desired size
			foreach ( $areas as $_size ) {
29 more lines...
WP Trac GitHub

Link here