image_downsize( int $id, string|int[] $size = 'medium' ): array|false

Scales an image to fit a particular size (such as ‘thumb’ or ‘medium’).

Description

The URL might be the original image, or it might be a resized version. This function won’t create a new resized copy, it will just return an already resized one if it exists.

A plugin may use the ‘image_downsize’ filter to hook into and offer image resizing services for images. The hook must return an array with the same elements that are normally returned from the function.

Parameters

$idintrequired
Attachment ID for image.
$sizestring|int[]optional
Image size. Accepts any registered image size name, or an array of width and height values in pixels (in that order). Default 'medium'.

Default:'medium'

Return

array|false Array of image data, or boolean false if no image is available.
  • 0 string
    Image source URL.
  • 1 int
    Image width in pixels.
  • 2 int
    Image height in pixels.
  • 3 bool
    Whether the image is a resized image.

Source

 * @type int $1 Image width in pixels. * @type int $2 Image height in pixels. * @type bool $3 Whether the image is a resized image. * } */ function image_downsize( $id, $size = 'medium' ) {	$is_image = wp_attachment_is_image( $id );	/** * Filters whether to preempt the output of image_downsize(). * * Returning a truthy value from the filter will effectively short-circuit * down-sizing the image, returning that value instead. * * @since 2.5.0 * * @param bool|array $downsize Whether to short-circuit the image downsize. * @param int $id Attachment ID for image. * @param string|int[] $size Requested image size. Can be any registered image size name, or * an array of width and height values in pixels (in that order). */	$out = apply_filters( 'image_downsize', false, $id, $size );	if ( $out ) {	return $out;	}	$img_url = wp_get_attachment_url( $id );	$meta = wp_get_attachment_metadata( $id );	$width = 0;	$height = 0;	$is_intermediate = false;	$img_url_basename = wp_basename( $img_url );	/* * If the file isn't an image, attempt to replace its URL with a rendered image from its meta. * Otherwise, a non-image type could be returned. */	if ( ! $is_image ) {	if ( ! empty( $meta['sizes']['full'] ) ) {	$img_url = str_replace( $img_url_basename, $meta['sizes']['full']['file'], $img_url );	$img_url_basename = $meta['sizes']['full']['file'];	$width = $meta['sizes']['full']['width'];	$height = $meta['sizes']['full']['height'];	} else {	return false;	}	}	// Try for a new style intermediate size.	$intermediate = image_get_intermediate_size( $id, $size );	if ( $intermediate ) {	$img_url = str_replace( $img_url_basename, $intermediate['file'], $img_url );	$width = $intermediate['width'];	$height = $intermediate['height'];	$is_intermediate = true;	} elseif ( 'thumbnail' === $size && ! empty( $meta['thumb'] ) && is_string( $meta['thumb'] ) ) {	// Fall back to the old thumbnail.	$imagefile = get_attached_file( $id );	$thumbfile = str_replace( wp_basename( $imagefile ), wp_basename( $meta['thumb'] ), $imagefile );	if ( file_exists( $thumbfile ) ) {	$info = wp_getimagesize( $thumbfile );	if ( $info ) {	$img_url = str_replace( $img_url_basename, wp_basename( $thumbfile ), $img_url );	$width = $info[0];	$height = $info[1];	$is_intermediate = true;	}	}	}	if ( ! $width && ! $height && isset( $meta['width'], $meta['height'] ) ) {	// Any other type: use the real image.	$width = $meta['width'];	$height = $meta['height'];	}	if ( $img_url ) {	// We have the actual image size, but might need to further constrain it if content_width is narrower.	list( $width, $height ) = image_constrain_size_for_editor( $width, $height, $size ); 

Changelog

VersionDescription
2.5.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    Add a function to select medium attachment images

    Maybe you already know wp_get_attachment_thumb_url() ;. Now I’m showing how to do the same thing to return the url for the medium sized attachment.

    function wp_get_attachment_medium_url( $id ) { $medium_array = image_downsize( $id, 'medium' ); $medium_path = $medium_array[0]; return $medium_path; }

    $id is the ID of the attachment. This can be really useful for plugins like WP-Choose-Thumb. With this function you can get the medium sized previews.

You must log in before being able to contribute a note or feedback.